android Handler 机制研究学习笔记
2015-07-17 17:37
459 查看
前言: 很早以前,学习android的时候就接触过Handler ,知道Handler是一个用于线程间通信的类,最常用于做下载条,最近,看了Pro android 3 这本书,里面描述的Handler 说得非常的细致,与此,写下Handler的学习笔记
从图中我们可以看到,当我们从外部调用组件的时候,Service 和 ContentProvider 是从线程池那里获取线程,而Activity 和BroadcastReceiver是直接在主线程运行,为了,追踪线程,我们可以用debug 方法,或者使用一个工具类,这里,我们创建一个用于监视线程的工具类
?
有了这样一个类就可以方便我们观察线程的运行
好了,现在准备好以后就进入正题Handler
下面是Handler,Message,Message Queue 之间的关系图
这个图有4个地方关系到handlers
1, 主线程(Main thread)
2, 主线程队列(Main thread queue)
3,Hanlder
4,Message
上面的四个地方,主线程,和主线程的队列我们无需处理,所以,我们主要是处理Handler 和 Message 之间的关系.
我们每发出一个Message,Message就会落在主线程的队列当中,然后,Handler就可以调用Message绑定的数据,对主线程的组件进行操作.
从官方文档中我们可以知道message 关于数据的字段
从上面的表格可以看出,message 提供了一个对象来存储对象,而且,还提供了三个int字段用来存储少量int类型
当然,除了以上三个Message 自有的字段外,我们还可以通过setData(Bundle b),来存储一个Bundle对象,来存储更丰富的数据类型,例如,图片等等.
在初始化我们的message的时候就可以为我们的Message默认字段赋值,注意赋值顺序!!!
?
前言: 很早以前,学习android的时候就接触过Handler ,知道Handler是一个用于线程间通信的类,最常用于做下载条,最近,看了Pro android 3 这本书,里面描述的Handler 说得非常的细致,与此,写下Handler的学习笔记
Android 运行的进程
为了,更好的了解Handler的机制,我们应该首先,将Android系统整个运行进程都要烂熟于心,下面是android 进程运行图:从图中我们可以看到,当我们从外部调用组件的时候,Service 和 ContentProvider 是从线程池那里获取线程,而Activity 和BroadcastReceiver是直接在主线程运行,为了,追踪线程,我们可以用debug 方法,或者使用一个工具类,这里,我们创建一个用于监视线程的工具类
?
好了,现在准备好以后就进入正题Handler
Handlers
为什么要使用Handlers?
因为,我们当我们的主线程队列,如果处理一个消息超过5秒,android 就会抛出一个 ANP(无响应)的消息,所以,我们需要把一些要处理比较长的消息,放在一个单独线程里面处理,把处理以后的结果,返回给主线程运行,就需要用的Handler来进行线程建的通信,关系如下图;下面是Handler,Message,Message Queue 之间的关系图
这个图有4个地方关系到handlers
1, 主线程(Main thread)
2, 主线程队列(Main thread queue)
3,Hanlder
4,Message
上面的四个地方,主线程,和主线程的队列我们无需处理,所以,我们主要是处理Handler 和 Message 之间的关系.
我们每发出一个Message,Message就会落在主线程的队列当中,然后,Handler就可以调用Message绑定的数据,对主线程的组件进行操作.
Message
作为handler接受的对象,我们有必要知道Message这个数据类型是个怎样的数据类型从官方文档中我们可以知道message 关于数据的字段
public int what | |
public int arg1 | |
public int arg2 | |
public Object obj |
当然,除了以上三个Message 自有的字段外,我们还可以通过setData(Bundle b),来存储一个Bundle对象,来存储更丰富的数据类型,例如,图片等等.
在初始化我们的message的时候就可以为我们的Message默认字段赋值,注意赋值顺序!!!
?
相关文章推荐
- Android Shape 形状
- Android评论留言页面
- android studio for max 初体验
- Android 代码设置Activity 背景透明
- 我的Android进阶之旅------>如何将Activity变为半透明的对话框?
- Android 开发 日期,时间拾取器
- Android中Listview(七)--排序ListView
- android 自动化测试工具Robotium 之Solo类的详细说明
- TextView实现跑马灯效果,不用获取焦点
- android简单定位
- PX2分享Android预设桌面定制与电量图标修改以及版本更改
- Android之Broadcast详解
- Android清除本地数据缓存代码
- Android通过构造函数传递数据
- Android4.4, extents PreferenceActivity, Runtime Exception 解决办法。
- android 之加载图片(二)
- Android之路:Activity的学习
- Android Studio中如何引用图片资源
- Android 文字环绕 图文混排 支持Span折叠
- SEAndroid和普通android的区别