android 下的 handler Message

研究了下android下的 handler  message 实现原理:

    new handler() 的时候  从ThreadLocal里面 获取当前线程下的

Looper实例下的 MessageQueue 的引用 保存在 handler.mQueue属性里面

handler发送消息本质就是向此集合写值

 

几个比较重要的节点

1.Looper.perpare() 实例化当前线程Looper对象

2. new handler()   选定 当前线程Looper对象 

3.handler.sendMessage() 发送消息  本质是向 mQueue写值  往选定的Looper存消息

4.Looper.loop()方法 取出当前线程Looper对象的消息执行相关操作 本质是从当前MessageQueue 取值

 

所以  使用的时候应该注意

1.  new Handler 和 Looper.loop,Looper.prepare  是同一个线程 ,sendMessage可以在任何线程  

2.  new Handler  必须在 Looper.perpare()之后  (Looper 不存在 肯定不可能有  mQueue)

3. 主线程默认调用了Looper.loop,Looper.prepare  其他线程需手动处理

4.有一个自带loop的 HandlerThread

 

posted @ 2020-10-29 17:13  dint  阅读(133)  评论(0编辑  收藏  举报