平常用的不是特别多,但是要知道内部原理,看看源码总结一下
首先为什么会有这个东西?
我们知道服务中 service 中的代码是运行在主线程中的,不能做耗时的操作,于是那如果想做耗时操作怎么做呢?就出来
IntentService
这么个东西,用来处理后台服务中的耗时操作并且可以在任务完成之后,自动停止服务。
基本使用
1 | public class MyIntentService extends IntentService { |
通过打印当前线程的 id
我们可以知道当前线程不是在主线程中,执行完成后,会自动执行 onDestroy()
方法。以上属于 IntentService
的基本用法。
有什么好处呢?
- 省去在
Service
中手动开线程的麻烦 - 当操作任务完成后自动停止服务
源码
1 | /** |
总结
IntentService.java
总结来说就是:一个 HandlerThread + ServiceHandler
, 以队列的形式处理异步操作的类。
IntentService
是继承与 Service
的,在 onCreate()
时,创建了 HandlerThread
实例( HandlerThread
又是啥呢,它是 Thread
子类,内部拿到一个当前线程的 Looper
, Looper
一直轮询消息,获得消息,处理消息),而 IntentService
内部有一个ServiceHandler
,ServiceHandler
的创建的 Looper
是拿的是 HandlerThread
的 Looper
, IntentService
在 onStart()
通过发送 Message
, 在处理 Message
调用的是 onHandleIntent()
方法。