美文网首页
如何实例化Handler以及消息队列是何时绑定的

如何实例化Handler以及消息队列是何时绑定的

作者: GabGo | 来源:发表于2019-04-04 16:07 被阅读0次

    先看整体模型

    在new Handler的时候会在构造函数里面同时实例化一个Looper

    所以实例化Handler的前提条件就是要先实例化一个Looper,调用Looper.prepare()来实现的,没有调用prepare,是无法实例化Handler的,这里要注意ThreadLocal是在prepare函数那边set了Looper对象,所以get的时候才会有值,关于ThreadLocal可以专门看别的文章,是线程私有变量的容器,有点小复杂

    这个Looper实例化的时候会同时实例化一个MessageQueue,和获取当前线程

    综上所述,如果要在一个子线程实例化Handler的时候必须先调用Looper.prepare(),而主线程在创建activity的时候就已经调用了prepare(),所以我们可以在主线程直接实例化Handler;

    Android提供了一个封装好的带有looper的线程类,即为HandlerThread,其实现在用了rxjava后,Handler这块就不用担心内存泄漏,如果想自己开启一个队里来管理,可以考虑HandlerThread,但是内存开销要注意;

    相关文章

      网友评论

          本文标题:如何实例化Handler以及消息队列是何时绑定的

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