HandlerThread
HandlerThread 继承 Thread,HandlerThread 本质上就是一个普通 Thread,只不过内部建立了 Looper,因此拥有自己的消息队列。不适合频繁处理耗时操作,因为消息是串行处理的,某个人任务执行时间过长,会导致后续的任务被延迟处理
通过调用 Thread 的 start 方法开始运行
结束消息轮询也是通过操作 Looper 实现的,退出 Looper 后,线程没有可执行代码,则会自动结束
源码
在 run 方法内初始化1
2
3
4
5
6
7
8Looper.prepare();
synchronized (this) {
mLooper = Looper.myLooper();
notifyAll();
}
Process.setThreadPriority(mPriority);
onLooperPrepared();
Looper.loop(); //开启轮询,因此除非主动退出,否则线程不会结束
1 | public boolean quit() { |
还有个 quitSafely 方法。二者的区别是调用了 MessageQueue 的 void quit(boolean safe)
方法
1 | // MessageQueue |
IntentService
四大组件是在主线程的,不可执行耗时操作。
IntentService 是个抽象类,需要实现抽象方法 onHandleIntent(可在该方法内执行耗时操作)。IntentService 会拥有消息队列(内部使用了 HandlerThread 的 Looper),且会在回调 onHandleIntent 后自动 stopSelf,销毁 Service。
源码
1 | @Override |