码迷,mamicode.com
首页 > 移动开发 > 详细

Android Hander、Looper、Message三者之间的联系

时间:2017-06-24 11:25:09      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:自身   sdn   关联   调用   避免   使用   产生   targe   chm   

 

1、首先Looper.prepare()在本线程中保存一个Looper实例,然后该实例中保存一个MessageQueue对象;因为Looper.prepare()在一个线程中只能调用一次,所以MessageQueue在一个线程中只会存在一个。
2、Looper.loop()会让当前线程进入一个无限循环,不端从MessageQueue的实例中读取消息,然后回调msg.target.dispatchMessage(msg)方法。
3、Handler的构造方法,会首先得到当前线程中保存的Looper实例,进而与Looper实例中的MessageQueue想关联。
4、Handler的sendMessage方法,会给msg的target赋值为handler自身,然后加入MessageQueue中。
5、在构造Handler实例时,我们会重写handleMessage方法,也就是msg.target.dispatchMessage(msg)最终调用的方法。
在Activity中,我们并没有显示的调用Looper.prepare()和Looper.loop()方法,为啥Handler可以成功创建呢,
这是因为在Activity的启动代码中,已经在当前UI线程调用了Looper.prepare()和Looper.loop()方法

 

 

产生一个Message对象,可以new ,也可以使用Message.obtain()方法;两者都可以,

但是更建议使用obtain方法,因为Message内部维护了一个Message池用于Message的复用,避免使用new 重新分配内存。

 

 

 

 

参考: Android HandlerThread 完全解析

 

Android Hander、Looper、Message三者之间的联系

标签:自身   sdn   关联   调用   避免   使用   产生   targe   chm   

原文地址:http://www.cnblogs.com/wangjiaghe/p/7072562.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!