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;
    }
});