HandlerThread/Handler/Looper

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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容