平常用的不是特别多,但是要知道内部原理,看看源码总结一下
首先为什么会有这个东西?
我们知道服务中 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() 方法。