参考资料:1.

Android异步消息处理机制完全解析,带你从源码的角度彻底理解

http://blog.csdn.net/guolin_blog/article/details/9991569 2.

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()方法。





更多相关文章

  1. 在Android(安卓)Service中弹出系统全屏对话框
  2. 三种方法使android 手机执行 二进制程序
  3. Android_判断文件是否存在并创建代码
  4. android 知识积累
  5. Android(安卓)pm命令使用方法
  6. Android在做webview与js交互,线程变化以及json传值失败
  7. Android(安卓)Html类
  8. 浅谈Java中Collections.sort对List排序的两种方法
  9. Python list sort方法的具体使用

随机推荐

  1. android应用程序图标
  2. Android 密度转换
  3. Android仿人人客户端(v5.7.1)——对从服务
  4. android调用webservice方法,参数或返回值
  5. Android Studio:Android Studio 配置
  6. android 反编译 apk 分享 smali2java 1.0
  7. Android(安卓)应用开发笔记 - 单项选择(Ra
  8. Android获取未安装apk
  9. 【Android】网络监测
  10. Android(安卓)GridView属性集合