HandlerThread 继承自 Thread
在Thread的基础上,增加了消息队列,有自己的Looper,并对外提供Looper的get方法
HandlerThread 必须配合 Handler 使用,HandlerThread 线程中具体做什么事,需要在 Handler 的 callback 中进行,因为它自己的 run 方法被写死了
子线程的 Handler 与 HandlerThread 关系建立是通过构造子线程的Handler 传入 HandlerThread 的 Looper 。所以在此之前,必须先调用 mHandlerThread.start 让 run 方法跑起来 Looper 才能创建。
mHandlerThread = new HandlerThread("HandlerThread");
mHandlerThread.start();
mUiHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
if (msg.what == 2) {
mButton.setText("子线程更新");
}
return false;
}
});
mChildHandler = new Handler(mHandlerThread.getLooper(), new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
if (msg.what == 1) {
try {
//子线程模拟延迟处理
Thread.sleep(2000);
mUiHandler.sendEmptyMessage(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return false;
}
});