HandlerThread/Handler/Looper

HandlerThread/Handler/Looper_第1张图片

1、HandlerThread在run中调用了Looper.prepare();初始化Looper;

2、再通过Looper的myLooper()获取这个初始化的Looper。而Looper的构造当中,初始化了MessageQueue,并获得当前线程。

3、Looper.prepare()中,将Looper放进ThreadLocal中,ThreadLocal存储了一份变量。。

4、接着 这里调用了 notifyAll(); 唤醒所有的线程?---在getLooper中有个wait,如果你get的话,会get不到,需要等到notifyAll执行完后,才能获取到,解决同步问题。

5、然后调用Looper.loop();  运行这个线程的消息队列

6、这里会获取到Looper和MessageQueue,获取MessageQueue中的Message,然后通过Handler处理message。这行代码:msg.handler.dispatchMessage(msg);

总结:在Activity中,有系统的Looper,所以在子线程中执行耗时的操作后,

Activity通过Handler,使用Looper在MessageQueue中获取Message,进行处理。

而在子线程中,需要达到这种效果,需要在子线程中创建Handler的Looper,于是就有了封装了Looper的thread,为HandlerThread。

你可能感兴趣的:(HandlerThread/Handler/Looper)