android Handler机制(个人理解)
来源:互联网 发布:数据科学师的职业规划 编辑:程序博客网 时间:2024/06/05 19:36
参考:http://blog.sina.com.cn/s/blog_62a6ef3e01018oju.html
android 多线程主要涉及的类有 Looper 、MessageQueue、Handler、Message
1、消息处理的整个流程是:首先是Handler类,这个类我们可以当成是线程中的一个专门的消息处理机构。在这个机构中它可以创建、发送、处理消息。
既然是消息处理机构那么在每个线程中都可以有其他线程的handler对象,它们在别的线程中收集资料整理成Message,然后发送到自己的线程中进行处理。自己线程这边收到消息后就会交由MessageQueue来排序存储;
MessageQueue类用于表示消息队列. 队列中的每一个Message都有一个when字段, 这个字段用来决定Message应该何时出对处理. 消息队列中的每一个Message根据when字段的大小由小到大排列, 排在最前面的消息会首先得到处理, 因此可以说消息队列并不是一个严格的先进先出的队列.接着就由Looper类从MessageQueue中取出消息交由Handler来处理。
2、这几个类之间的关系是:
Handler处理消息需要Looper类从消息队列(MessageQueue)中取,消息队列(MessageQueue类)是通过Looper来创建的
每个线程最多只能有一个消息队列, android中UI线程默认具有消息队列, 但非UI线程在默认情况下是不具备消息队列的.
如果需要在非UI线程中开启消息队列, 需要调用Looper.prepare()方法, 在该方法的执行过程中会创建一个Looper对象, 而Looper的构造函数中会创建一个MessageQueue instance(Looper的构造函数是私有的, 在Looper类之外无法创建其对象). 此后再为该线程绑定一个Handler instance, 然后调用Looper.loop()方法, 就可以不断的从消息队列中取出消息和处理消息了. Looper.myLoop()方法可以得到线程的Looper对象, 如果为null, 说明此时该线程尚未开启消息队列.
消息的生成:
我们知道Message类用于表示消息那么生成消息即 Message对象的方式有:
a、直接初始化 Message msg=new Message()
b、通过Handler对象(定义Handler对象为handle)
Message msg=handle.obtainMessage();
Message msg=handle.obtainMessage(int what);
Message msg=handle.obtainMessage(int what,Object object);
Message msg=handle.obtainMessage(int what,int arg1,int arg2);
Message msg=handle.obtainMessage(int what,int arg1,int arg2,Object obj);
关于这些参数的解释:
Message对象可以通过 arg1、arg2、obj字段携带数据,此外还有许多字段如:what字段表示code,即这个消息具体是什么类型的消息。每个what都在其handler的namespace中,我们只需要确保同一个handler处理的消息的what值不同。
注:Toast或者Dialog中都有一个Handler的成员变量,在初始化时都会跟着初始化,而Toast或者Dialog中的Handler都需要一个Looper,所以需要在包含该Toast或者Dialog的线程中(如下面的Timer线程)初始化Looper。Looper.prepare();****
- android Handler机制(个人理解)
- Android Handler机制理解
- Android~Handler机制自我理解
- 深入理解android Handler机制
- android Handler、looper的个人理解
- android事件机制个人理解
- Android进阶笔记(二)Handler消息机制理解
- Android消息机制理解(Handler、Looper、MessageQueue)
- Android Handler消息机制的理解
- 【Android 学习】深入理解Handler机制
- 深入理解Android中的Handler机制
- 带你深入理解Android Handler机制
- Android中Handler机制的理解
- Android Handler消息机制的理解
- [Android源码]l理解handler机制
- Android<我所理解的Handler机制>
- 带你深入理解Android Handler机制
- 深入理解Android中Handler机制
- Go程序性能分析pprof
- 用正则表达式提取clob里的文本格式记录集
- 使用Memory Analyzer tool(MAT)分析内存泄漏(一)
- 前端的那些坑(针对java程序员)
- SQL分页语句格式
- android Handler机制(个人理解)
- Android学习笔记进阶19之给图片加边框
- 虚拟机大牛RednaxelaFX关于java里面的静态变量、成员变量、局部变量的内存分配
- 微信公众平台开发--快递查询
- Android 代码自动提示功能
- 《表格——布局产品简介》
- mysql 日志 (键人岐)
- 格式化时间日期的函数
- JVM指令集