HandlerThread是带Looper的Thread,looper可用于创建Handler,这样就拥有一个在后台long-running的worker-thread,通过Handler给其发送消息,worker-thread收到消息后再回调Handler的handleMessage().
开启HandlerThread,需要调用start()。
调用HandlerThread的quit(),或者HandlerThread的looper的quit()可以停掉HandlerThread。
构造方法
/**
* Constructs a HandlerThread.
* @param name
* @param priority The priority to run the thread at. The value supplied must be from
* {@link android.os.Process} and not from java.lang.Thread.
*/
public HandlerThread(String name, int priority) {
super(name);
mPriority = priority;
}
当调用 HandlerThread的start(),run()方法被执行。
@Override
public void run() {
mTid = Process.myTid();
Looper.prepare();
synchronized (this) {
mLooper = Looper.myLooper();
notifyAll();
}
Process.setThreadPriority(mPriority);
onLooperPrepared();
Looper.loop();
mTid = -1;
}
在run()中,调用了Looper.prepare(),Looper.loop(),这样Thread就会轮寻MessageQueue,有消息则处理,无则阻塞等待。onLooperPrepared()是个回调方法,如果想在Looper loop前做什么初始化操作,则在该方法中完成。
其他方法还有getLooper()返回当前Thread的Looper, quit()线程执行结束。
源码中使用HandlerThread的地方有IntentService .