Service 与 IntentService的区别

Service 不是运行在独立的线程,所以不建议在Service中编写耗时的逻辑和操作,否则会引起ANR

IntentService

  1. 可用与执行后台耗时的任务,任务执行后会自动停止
  2. 具有高优先级,射核稿优先级的后台任务,切不容易被后台系统杀死。
  3. 可以多次启动,每个耗时操作都会以工作队列的方式在IntentService的onHandlIntent回调方法中执行。

上述三点源码解析

IntentServic 继承Service

  1. IntentService -> onCreate 创建了线程HandlerThread extend Thread,是个子线程。在这里面run 方法,Looper.prepare----Looper.looper

然后实例化 ServiceHandler extends Handler 并将子线程的looper传入

回调方法handleMessage中,先后调用了抽象方法「onHandleIntent(Intent)」, 紧接着下面执行调用Service自身的「stopSelf(msg.arg1)」所以任务执行后会停止

  1. HandlerThread 子线程设置了优先级THREAD_PRIORITY_DEFAULT = 0; 很高

  2. 在onStart-> 发送消息 ServiceHandler本质是Handler
    回调onHandlerIntent 执行在子线程。所以本身是依靠Handler队列机制的,因此会以工作队列方式执行。

你可能感兴趣的:(Service 与 IntentService的区别)