Hanler阅读

原创 2017年01月03日 15:31:28

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 msg = new Message();
    msg.what = 0;
    handler.sendMessage(msg);

6.可以新建一个new message 也可以Message.obtain()。
注:产生一个Message对象,可以new ,也可以使用Message.obtain()方法;两者都可以,但是更建议使用obtain方法,因为Message内部维护了一个Message池用于Message的复用,避免使用new 重新分配内存。

    private Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            if (msg.what == 0) {

            }
             else if (msg.what == 1) {

            }
            else if (msg.what == 2) {

            }
        }
    };

参考鸿洋大神的博客http://blog.csdn.net/lmj623565791/article/details/38377229

相关文章推荐

Maven指南阅读笔记

  • 2017年11月14日 15:32
  • 1.13MB
  • 下载

仿36氪Android阅读客户端

  • 2017年11月10日 18:48
  • 2.25MB
  • 下载

Tomcat源码阅读之StandarWrapper源码分析

StandarWrapper,嗯,其实可以将其理解为对servlet对象的包装。。。先来看看简单的继承结构吧: 这里的继承体系还算是比较简单吧,首先是继承了ContainerBase,让Standar...

阅读材料及作业2

  • 2017年11月09日 23:37
  • 39KB
  • 下载

安卓阅读软件

  • 2017年10月26日 16:29
  • 39.62MB
  • 下载

shell 脚本阅读之二——ltp工具下的runltp

此为shell脚本阅读的第二篇

一订-阅读软件

  • 2017年06月06日 13:58
  • 51KB
  • 下载

《Lua程序设计》(Programming in Lua)阅读笔记

官网:http://www.lua.org/ 社区:http://lua-users.org/ 论坛:http://www.luaer.cn/ 在线中文手册:http://manual.luae...

PDF-XChange Viewer(PDF阅读,编辑)

  • 2014年08月13日 15:19
  • 9.49MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hanler阅读
举报原因:
原因补充:

(最多只允许输入30个字)