美文网首页
handler是如何切换线程的

handler是如何切换线程的

作者: 小马奔腾走天下 | 来源:发表于2020-08-09 17:47 被阅读0次

    handler是消息处理者,把消息放到messagequeue,并对消息进行处理。

    首现 在一个线程中, new Handler() 必须先执行,Looper.prepare() 创先looper,

    主线程没有手动调用Looper.prepare(),是因为 app启动时,在ActivityThread main主入口,执行了 Looper.prepareMainThread.   

    public static void prepareMainLooper() {  ...  }

    实际线程间切换,就是通过线程间共享变量实现的。

    示例,两个线程 A线程   B线程

    在A线程new handler(),在b线程调用这个handler发送消息,这个message发送到了,A线程中的 messageQueue里面,又回到了a线程中执行。

    handler 持有Looper实例,looper有持有messageQueue实例,   handler 把message发送到了 当前持有的messageQueue实例中。这个messageQueue 在new handler之前,已经通过当前线程的Looper.prepare创建了。

    相关文章

      网友评论

          本文标题:handler是如何切换线程的

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