Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系
2016-03-28 16:14
411 查看
参考资料:1.
http://blog.csdn.net/guolin_blog/article/details/9991569
2.
http://blog.csdn.net/lmj623565791/article/details/38377229
到此,这个流程已经解释完毕,让我们首先总结一下
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()方法。
![](https://img-blog.csdn.net/20140805002935859?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG1qNjIzNTY1Nzkx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
Android异步消息处理机制完全解析,带你从源码的角度彻底理解
http://blog.csdn.net/guolin_blog/article/details/99915692.
Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系:
http://blog.csdn.net/lmj623565791/article/details/38377229到此,这个流程已经解释完毕,让我们首先总结一下
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()方法。
相关文章推荐
- List集合数据排序
- android listview的单选事件
- android 权限明细
- android studio 在win10上弹出框过大,无法进行下一步
- WindowManager addView不上去的问题?
- android studio 子工程模块编译可以通过,运行时却找不道子工程包名解决
- Android 通知栏Notification的整合 全面学习
- AOSP sourcecode 使用Android Studio打开
- android中activity的生命周期
- Android5.0+(CollapsingToolbarLayout)
- Android 疑难杂症之获取listView Item上面组件的值
- android属性动画常用方法总结
- android自定义加载数据动画dialog和简单的timer计时器
- Android_关于屏幕适配经验总结
- 【Android】沉浸式状态栏实现
- Android判断同一个类的两个对象的内容是否相同
- Failed to resolve: com.android.support:support-v4:23.1.1
- android 音乐播放器
- Android Drawable 那些不为人知的高效用法
- Android Studio 多渠道打包改名(超简单版)