美文网首页
HandlerThread/Handler/Looper

HandlerThread/Handler/Looper

作者: 风吹过山 | 来源:发表于2017-04-24 17:11 被阅读0次

    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

          本文链接:https://www.haomeiwen.com/subject/jfypzttx.html