HandlerThread继承了Thread,它是一种可以使用Handler的Thread,它的实现也很简单,就是在run方法中通过Looper.prepare()来创建消息队列,并通过Looper.loop()来开启消息循环。
@Override
public void run() {
mTid = Process.myTid();
Looper.prepare();
synchronized (this) {
/**
* 获取到当前Thread的Looper对象
* 然互通知 getLooper 方法,这个时候可以返回(同步)
*/
mLooper = Looper.myLooper();
notifyAll();
}
Process.setThreadPriority(mPriority);
onLooperPrepared();
Looper.loop();
mTid = -1;
}
从HandlerThread的实现来看,它和普通的Thread有明显的不同之处。普通的Thread主要用于在run方法中执行一段耗时任务,而HandlerThread在内部创建了消息队列,外界要通过Handler的消息队列来通知HandlerThread执行一个具体任务。由于HandlerThread 的run方法是一个无限循环,因此当明确不需要再使用HandlerThread时,应该通过它的quit或者quitSafely方法来终止线程的执行。HandlerThread是一个非常有用的类,在Android中的一个具体的使用场景就是IntentService,请看:
IntentService 示例与详解