HandlerThread 介绍

       HandlerThread 继承了 Thread,它是一种可以使用 Handler 的 Thread,它的实现很简单,就是在 run 方法中通过 Looper.prepare() 来创建消息队列,并通过 Looper.loop() 来开启消息循环,这样在实际的使用中就允许在 HandlerThread 中创建 Handler 了。HandlerThread 的 run 方法如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
public void run() {
mTid = Process.myTid();
Looper.prepare();
synchronized (this) {
mLooper = Looper.myLooper();
notifyAll();
}
Process.setThreadPriority(mPriority);
onLooperPrepared();
Looper.loop();
mTid = -1;
}

       从 HandlerThread 的实现来看,它和普通的 Thread 有显著的不同之处。普通 Thread 主要用于在 run 方法中执行一个耗时任务,而 HandlerThread 在内部创建了消息队列,外界需要通过 Handler 的消息方式来通知 HandlerThread 执行一个具体的任务。HandlerThread 在 Android 中的一个具体使用场景是 IntentService。由于 HandlerThread 的 run 方法是一个无限循环,因此当明确不需要再使用 HandlerThread 时,可以通过它的 quit 或者 quitSafely 方法来终止线程的执行,这是一个良好的编程习惯。

参考资料:
《Android 开发艺术探索》任玉刚 第11章 11.2 11.2.3 HandlerThread

Fork me on GitHub