Android HandlerThread 和 Looper
HandlerThread 是一个包含一个 Looper 对象的线程。这个 Looper 对象可以用来创建多个 Handler 对象。注意 HandlerThread 和普通的线程没什么两样,Thread.start() 仍需被调用。
HandlerThread 的 getLooper() 方法返回和这个线程关联的 Looper 对象。如果这个线程还没被启动或者因为其他原因 isAlive() 方法返回 false,这个方法将返回一个空对象。如果这个线程已经被启动,这个方法将阻塞直到关联的 Looper 对象已经被初始化。
Looper 用于为一个线程运行消息循环。线程默认没有和自身关联的消息循环,如果要创建一个,就在要运行循环的线程中调用 prepare() 方法,然后调用 loop() 方法使其处理消息,直到循环停止。
和消息循环的大多数交互是通过 Handler 类完成。要了解 Android Handler 机制可阅读以前的文章 Android Handler 机制。
以下是实现一个和 Looper 关联的线程的典型例子,使用 prepare() 和 loop() 的分隔创建一个初始 Handler 去和 Looper 通信。
class LooperThread extends Thread {
public Handler mHandler;
public void run() {
Looper.prepare();
mHandler = new Handler() {
public void hanldeMessage(Message msg) {
// 在这里处理过来的消息
}
};
Looper.loop();
}
}
HandlerThread 和 Looper 的介绍到这里就结束了。