HandlerThread 继承了 Thread,它是一种可以使用 Handler 的 Thread,它的实现很简单,就是在 run 方法中通过 Looper.prepare() 来创建消息队列,并通过 Looper.loop() 来开启消息循环,这样在实际的使用中就允许在 HandlerThread 中创建 Handler 了。HandlerThread 的 run 方法如下所示:
1 | public void run() { |
从 HandlerThread 的实现来看,它和普通的 Thread 有显著的不同之处。普通 Thread 主要用于在 run 方法中执行一个耗时任务,而 HandlerThread 在内部创建了消息队列,外界需要通过 Handler 的消息方式来通知 HandlerThread 执行一个具体的任务。HandlerThread 在 Android 中的一个具体使用场景是 IntentService。由于 HandlerThread 的 run 方法是一个无限循环,因此当明确不需要再使用 HandlerThread 时,可以通过它的 quit 或者 quitSafely 方法来终止线程的执行,这是一个良好的编程习惯。
参考资料:
《Android 开发艺术探索》任玉刚 第11章 11.2 11.2.3 HandlerThread