HandlerThread
HandlerThrad继承了Thread,它是一种可以使用Handler的Thread,它的实现也很简单,就是在run方法中通过Looper.prepare()来创建消息队列,并通过Looper.loop()方法来开启消息循环,这样就实际的使用中就允许在HandlerThraead中创建Handler了,以下是HanlderThrad的run方法。
@Override
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的run方法开启了一个无限循环,因此当不需要HandlerThread的时候,可以通过quit或者quitSafely方法来终止线程的执行。
HandlerThread在Android中一个具体的场景就是IntentService。
示例
HandlerThread handlerThread = new HandlerThread("HandlerThread#1");
handlerThread.start();
Handler hanlder = new Handler(handlerThread.getLooper()) {
@Override
public void handleMessage(Message msg) {
// somm code
}
};
handler.sendMessage(message);
通过创建HandlerThread并通过start方法运行这个线程,通过获取其内部的looper构造Handler并派生子类创建消息处理的方法,最后通过Handler发送信息。