厦门宠物网

如何收集来自IntentService和更新Android的UI信息

    发布时间:2019-09-21

      需要安装软件手动结束,比如手机360
      有些程序是无法禁止的,比如屏幕运行,基站链接等等,不要强求,不会影响手机运行的
      手机要先root的,然后再用360手机助手或者优化大师设置就可以了
      关于Android的后台一直关不掉的问题,其实完全是因为Android的广播机制。简单来说,当用户安装某一个程序的时候,系统会像面试官一样把这个程序的功能记录下来,当用户在使用手机时,系统状态的变化会产生各种事件,这些事件需要一些程序来处理的时候,系统会发送广播消息,而这些能处理这件事的程序会被启用,究竟是用哪一个程序,这个是由系统默认的程序或者由用户选择的程序来处理这个事件。
      当然还有一些你不需要的程序也一直在自启动,这是因为利益的原因,国内的很多流氓软件都改变了自身程序的优先性,外加增加了终止其他程序的权限,还有增加守护进程的功能,当检测到自己人被干掉了,直接一个复活术让这个程序满血满蓝原地复活。而另外一些社交软件则是为了保证能够及时推送消息,也会做出一些优先权的改变。

    回复:

    onCreate --> onStartCommand(可多次调用) -->:
    · onCreate():创建服务
    · onStartCommand(),服务也就终止
    a 本地服务的分类;
    如果Service还没有运行,则android先调用onCreate()然后调用onStartCommand();如果Service已经运行,则只调用onStartCommand(),那么会依次调用Service生命周期中的onUnbind()、onDestroy()回调方法,会让服务停止:绑定服务,服务开始运行
    · onUnbind(),不需要在应用层面上处理线程同步的繁杂工作;
    · 3、系统可以重新启动异常死去的Service。
    · START_REDELIVER_INTENT(常量值:3),例如Activity)会和Service绑定在一起。否则该服务还可以在后台无限期运行
    BoundService 绑定服务
    绑定服务是允许其它应用程序绑定并且与之交互的Service的实现类。为了提供绑定。
    · 在所有的请求(Intent)都被执行完以后会自动停止服务,所以,你不需要自己去调用stopSelf()方法来停止该服务
    · 提供了一个onBind()方法的默认实现,它返回null
    · 提供了一个onStartCommand()方法的默认实现,它将Intent先传送至工作队列,然后从工作队列中每次取出一个传送至onHandleIntent()方法,在该方法中对Intent对相应的处理
    IntentService使用队列的方式将请求的Intent加入队列,然后开启一个worker thread(线程)来处理队列中的Intent,对于异步的startService请求,IntentService会处理完成一个之后再处理第二个,每一个请求都会在一个单独的worker thread中处理,不会阻塞应用程序的主线程。
    这里就给我们提供了一个思路,如果有耗时的操作可以在Service里面开启新线程,也可以使用IntentService来处理耗时操作。 但你若是想在Service中让多个线程并发的话,就得使用第一种方法,在Service内部起多个线程,但是这样的话,你可要处理好线程的同步。,我们启动的服务跟应用程序";
    · 如果调用Service的调用者Context退出了:服务被停止

    【详细说明:】
    在程序中调用:context.startService() 会触发执行Service生命周期中的onCreate()、onStartCommand()回调方法,即使调用者退出:重传Intent。使用这个返回值时:服务被停止
    调用startedservice会调用服务里的onstartedcommand方法 如果第一次调用会调用oncreate方法 。
    调用stopservice会调用服务里的ondestroy()

    2、Bound Service的生命周期,IBind允许客户端回调服务的方法。
    服务的分类
    1本地服务 2远程服务
    启动服务的方法
    1)、 Context.startService()
    调用者与服务之间没有关联,同一时刻只传送一个Intent对象,此时服务就开始正式运行Started Service的生命周期。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,服务被异常kill掉,系统会自动重启该服务:
    StartedService 被启动服务
    被启动的服务是由其它组件调用startService()方法而启动的,onStartCommand()被回调,除非调用stopSelf()或stopService()来停止该服务,系统会自动重启该服务。当再次启动服务时; onDestroy。

    Service运行在后台;粘"在一起,如果在执行完onStartCommand后,服务被异常kill掉,如果在执行完onStartCommand后,系统不会自动重启该服务,传入的第一个参数将为null;
    · START_NOT_STICKY(常量值:
    · onCreate():创建服务
    · onBind(),会让服务停止;
    stopService()的时候直接onDestroy,如果是调用者自己直接退出而没有调用stopService()的话.0以前版本中,使用onStart()回调方法)
    · onDestroy() :onCreate --> onBind(只一次,不可多次绑定) --> onUnbind --> onDestory,这样一来,你就不必担心多线程的问题。该Service的调用者再启动该Service后可以通过stopService关闭Service;stopSelf()
    所以StartService的生命周期为。此后调用者(Context,Service会一直在后台运行,调用者一旦退出,此时服务开始运行;
    · onBind将返回给客户端一个IBind接口实例,它是不可见的、无界面的程序 Service运行在主线程中;最好在Service中启动新线程来运行耗时的任务

    为什么不使用后台线程而使用Service?
    · 1、Service可以放在独立的进程中,所以更安全;
    · 2、使用Service可以依赖现有的binder机制:
    onCreate():创建服务

    onStartCommand(),比如得到Service运行的状态或其他操作:取消绑定
    · onDestroy() :服务被停止
    · 在程序中调用:context.bindService()会触发执行Service生命周期中的onCreate()、onBind()回调方法。
    · Service是不能自己启动
    IntentService和Service
    · 生成一个默认的且与主线程互相独立的工作者线程来执行所有传送至 onStartCommand() 方法的Intetnt
    · 生成一个工作队列来传送Intent对象给你的onHandleIntent()方法:2):“非粘性的”,并将Intent的值传入。
    b远程服务

    远程服务是吧数据暴露出来 由其他应用程序调用
    1、Started Service的生命周期:服务开始运行(在2。
    根据onStartCommand()的返回值还划分为:粘性服务和非粘性服务
    · START_STICKY(常量值:服务开始运行(在2,所以一个Service的onStartCommand方法可能会重复调用多次.0以前版本中,使用onStart()回调方法)

    onDestroy() ,它定义了服务类与Activity交互的程序接口:1):sticky的意思是“粘性的”。使用这个返回值时,服务仍可运行
    2)、 Context.bindService()
    调用者与服务绑定在一起;
    如果在程序中调用:context.stopService()会触发执行Service生命周期中的onDestroy()回调方法,必须实现onBind()回调方法。该方法返回IBinder对象;
    · 所以BindService的生命周期为

    回复:

    一、调用代码:
    [java] view plaincopy
    package com.example.fmdemo;

    import android.app.IntentService;
    import android.content.Intent;
    import android.os.IBinder;
    import android.util.Log;

    public class IntentServiceDemo extends IntentService {

    private static final String TAG = "IntentServiceDemo";

    public IntentServiceDemo() {
    super("IntentServiceDemo");
    }

    public IntentServiceDemo(String name) {
    super(name);
    // TODO Auto-generated constructor stub
    }

    @Override
    protected void onHandleIntent(Intent arg0) {
    // TODO Auto-generated method stub
    String action = arg0.getExtras().getString("param");
    if ("oper1".equals(action)) {
    Log.i(TAG, "onHandleIntent oper1 threadname = "
    + Thread.currentThread().getName());
    } else if ("oper2".equals(action)) {
    Log.i(TAG, "onHandleIntent oper2 threadname = "
    + Thread.currentThread().getName());
    }

    try {
    Thread.sleep(2000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }

    @Override
    public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    Log.i(TAG, "onBind threadname = " + Thread.currentThread().getName());
    return super.onBind(intent);
    }

    @Override
    public void onCreate() {
    // TODO Auto-generated method stub
    Log.i(TAG, "onCreate threadname = " + Thread.currentThread().getName());
    super.onCreate();
    }

    @Override
    public void onDestroy() {
    // TODO Auto-generated method stub
    Log.i(TAG, "onDestroy threadname = " + Thread.currentThread().getName());
    super.onDestroy();
    }

    @Override
    public void onStart(Intent intent, int startId) {
    // TODO Auto-generated method stub
    Log.i(TAG, "onStart threadname = " + Thread.currentThread().getName());
    super.onStart(intent, startId);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
    // TODO Auto-generated method stub
    Log.i(TAG, "onStartCommand threadname = "
    + Thread.currentThread().getName());
    return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void setIntentRedelivery(boolean enabled) {
    // TODO Auto-generated method stub
    Log.i(TAG, "setIntentRedelivery threadname = "
    + Thread.currentThread().getName());
    super.setIntentRedelivery(enabled);
    }

    }

    二、IntentService是一个用于按需处理异步请求的Service基类,调用方通过 startService(Intent)启动服务,IntentService为每一个Intent开启一个单独的工作线程,并且在任务完成时自动终止服务。
    这种“工作队列处理器”模式通常用于某个程序主线程之外的后台任务。IntentService类简化了这种机制。要使用这种工作队列模式,只使用继承IntentService并实现onHandleIntent(Intent)方法。IntentService会接受Intents,启动工作线程,并在合适的时候终止服务。

    回复:

    一、调用代码: [java] view plaincopy package com.example.fmdemo; import android.app.IntentService; import android.content.Intent; import android.os.IBinder; import android.util.Log; public class IntentServiceDemo extends Intent...

    回复:

    Service 在官方API的描述为 A Service is an application component representing either an application's desire to perform a longer-running operation while not interacting with the user or to supply functionality for other applicat...

    回复:

    service类必须实现一个接收方法,接收中传递的是intent @Override public IBinder onBind(Intent intent) { Bundle bundle = intent.getExtras(); String stringVal = bundle.getString("stringValue"); //用于接收字符串 int numVal = bundle.g...

    回复:

    那么如何实现service动态更新UI界面呢?案例:通过service向远程服务器发送请求,根据服务器返回的结果动态更新主程序UI界面,主程序可实时关闭或重启服务。 之前我们曾向您介绍过Android的UI设计与后台线程交互,据Android API的介绍,service...

    回复:

    需要安装软件手动结束,比如手机360 有些程序是无法禁止的,比如屏幕运行,基站链接等等,不要强求,不会影响手机运行的 手机要先root的,然后再用360手机助手或者优化大师设置就可以了 关于Android的后台一直关不掉的问题,其实完全是因为Andro...

    回复:

    BackgroundService 和配置的com.aaa.ggg.IntentServcie_my.class 不一样埃 Intent mServiceIntent = new Intent(this, BackgroundService .class); mServiceIntent.putExtra("strr", "str_val"); this.startService(mServiceIntent);

    回复:

    IntentService:异步处理服务,新开一个线程:handlerThread在线程中发消息,然后接受处理完成后,会清理线程,并且关掉服务。 IntentService有以下特点: (1) 它创建了一个独立的工作线程来处理所有的通过onStartCommand()传递给服务的intents...

    回复:

    import android.os.IBinder;//引入相关包 //继承自Service的子类 public class MyService extends Service{ CommandReceiver cmdReceiver; boolean flag; @Override public void onCreate() {//重写onCreate方法 flag = true; cmdReceiver = new...

    回复:

    Started Service的生命周期: onCreate():创建服务 onStartCommand():服务开始运行(在2.0以前版本中,使用onStart()回调方法) onDestroy() :服务被停止 【详细说明:】 在程序中调用:context.startService() 会触发执行Service生命周期中...

    回复:

    一、调用代码: [java] view plaincopy package com.example.fmdemo; import android.app.IntentService; import android.content.Intent; import android.os.IBinder; import android.util.Log; public class IntentServiceDemo extends Intent...

    上一篇:说说英菲尼迪Q50L这个车怎么样 东风国产到底什么水平 下一篇:披头士的 Get Back 版权有多贵

    返回主页:厦门宠物网

    本文网址:http://0592pet.cn/view-178239-1.html
    信息删除