handler消息机制 小结
2016-05-10 20:51
155 查看
一、为什么要用Handle这样的机制:
因为在Android系统中UI操作并不是线程安全的,如果多个线程并发的去操作同一个组件,
可能导致线程安全问题。
为了解决这一个问题,android制定了一条规则:只允许UI线程来修改UI组件的属
性等,如果在UI界面进行一个耗时的操作。就会出现ANR异常。
这些耗时操作要写在一个子线程里。这时候就需要线程间的通信。
而线程间的通信是通过消息机制实现的。
二、消息机制中几个比较重要的角色
1.Message:
Message:消息的载体,用于表示消息的内容
2.Handler:消息的发送者,和消息的处理者
3.Looper:
主要负责消息机制的运转,他就是在不停的接受消息,然后分发消息。
4.MessageQueue:
消息队列
是用来存放消息的
-------------
要发送消息,首先要有消息。
如何创建消息的对象:
Message msg = Message.obtain();
在消息中封装信息
msg.what=0;
msg.arg1=2;
handler.sendMessage(msg);
-----------------
上面两句可以写成一句:
Message msg = Message.obtain(h,what,arg1,arg2);
Message msg = Message.obtain(handler,0,2);
msg.sendToTarget();
-----------------
另一种创建消息对象的方法
通过Handler对象的obtainMessage()获取消息对象,这个方法实际上也是通过Message的obtain()
方法实现的。
Message msg = handler.obtainMessage(what, arg1, arg2, obj)
handler.sendMessage(msg);
-------------------------------
处理消息的时候,写一个类继承Handler这个类,重写方法
public void handleMessage(Message msg){
}
----------------------------------
三、Handler执行的过程
Android启动时,会创建一个主线程,主线程初始化第一个Handler时,会创建Looper.
Looper是与主线程一一对应的,每个线程只有一个Looper。系统会默认初始化一个Looper
对象,负责管理MessageQueue.
Handler在工作线程发送消息的时候,Looper会接受这个消息。这个消息会放在消息队列里。
然后Looper又会分发这个消息。UI线程接受到Looper分发的消息,然后在handlerMessage(Message msg)
这个方法里,处理消息。
这个过程就是发送消息,接受消息的过程。
--------------Android菜鸟的浅显理解
因为在Android系统中UI操作并不是线程安全的,如果多个线程并发的去操作同一个组件,
可能导致线程安全问题。
为了解决这一个问题,android制定了一条规则:只允许UI线程来修改UI组件的属
性等,如果在UI界面进行一个耗时的操作。就会出现ANR异常。
这些耗时操作要写在一个子线程里。这时候就需要线程间的通信。
而线程间的通信是通过消息机制实现的。
二、消息机制中几个比较重要的角色
1.Message:
Message:消息的载体,用于表示消息的内容
2.Handler:消息的发送者,和消息的处理者
3.Looper:
主要负责消息机制的运转,他就是在不停的接受消息,然后分发消息。
4.MessageQueue:
消息队列
是用来存放消息的
-------------
要发送消息,首先要有消息。
如何创建消息的对象:
Message msg = Message.obtain();
在消息中封装信息
msg.what=0;
msg.arg1=2;
handler.sendMessage(msg);
-----------------
上面两句可以写成一句:
Message msg = Message.obtain(h,what,arg1,arg2);
Message msg = Message.obtain(handler,0,2);
msg.sendToTarget();
-----------------
另一种创建消息对象的方法
通过Handler对象的obtainMessage()获取消息对象,这个方法实际上也是通过Message的obtain()
方法实现的。
Message msg = handler.obtainMessage(what, arg1, arg2, obj)
handler.sendMessage(msg);
-------------------------------
处理消息的时候,写一个类继承Handler这个类,重写方法
public void handleMessage(Message msg){
}
----------------------------------
三、Handler执行的过程
Android启动时,会创建一个主线程,主线程初始化第一个Handler时,会创建Looper.
Looper是与主线程一一对应的,每个线程只有一个Looper。系统会默认初始化一个Looper
对象,负责管理MessageQueue.
Handler在工作线程发送消息的时候,Looper会接受这个消息。这个消息会放在消息队列里。
然后Looper又会分发这个消息。UI线程接受到Looper分发的消息,然后在handlerMessage(Message msg)
这个方法里,处理消息。
这个过程就是发送消息,接受消息的过程。
--------------Android菜鸟的浅显理解
相关文章推荐
- C++第五次实验
- [改善Java代码]建议采用的顺序是 List<T>、List<?>、List<Object>
- fzoj Problem 1894 志愿者选拔 【单调队列】
- Linux 64位下一键安装scipy等科学计算环境
- 在防火墙配置自定义服务
- C++界面库大全2013
- Linux 64位下一键安装scipy等科学计算环境
- 2016年学习Linux决心书(老男孩教育在线课程班第二期)
- Intellj IDEA显示行号
- <<程序员面试宝典>>读书笔记 5
- PHP的垃圾回收机制
- hdu 3635(并查集)
- ajaxfileupload 实现多文件上传
- bzoj 1452: [JSOI2009]Count
- bzoj 1419: Red is good
- C++ Primer 学习笔记_93_用以大型程序的工具 -命名空间[续2]
- 从c++的菱形继承到 C#的接口机制
- Android学习笔记5:探究活动2
- 我们究竟什么时候可以使用Ehcache缓存
- Android 判断网络连接状态--实现微信在线/离线状态切换