没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
5页
android线程消息机制主要由Handler,Looper,Message和MessageQuene四个部分组成。平常在开发中,我们常用来在子线程中通知主线程来更新,其实整个安卓生命周期的驱动都是通过Handler(ActivityThread.H)来实现的。 首先我们先介绍这四个类的作用: Handler:消息的发送者。负责将Message消息发送到MessageQueue中。以及通过Runnable,Callback或者handleMessage()来实现消息的回调处理 Looper:是消息的循环处理器,它负责从MessageQueue中取出Message对象进行处理。(Looper含有
资源详情
资源评论
资源推荐
android线程消息机制之线程消息机制之Handler详解详解
android线程消息机制主要由Handler,Looper,Message和MessageQuene四个部分组成。平常在开发中,我们常用来在子线程
中通知主线程来更新,其实整个安卓生命周期的驱动都是通过Handler(ActivityThread.H)来实现的。
首先我们先介绍这四个类的作用:
Handler::消息的发送者。负责将Message消息发送到MessageQueue中。以及通过Runnable,Callback或者handleMessage()
来实现消息的回调处理
Looper::是消息的循环处理器,它负责从MessageQueue中取出Message对象进行处理。(Looper含有MessageQueue的引
用)
Message::是消息载体,通过target来指向handler的引用。通过object来包含业务逻辑数据。其中MessagePool为消息池,用
于回收空闲的Message对象的。
MessageQueue::消息队列,负责维护待处理的消息对象。
通过上面的图,我们可以比较清楚地知道他们的作用以及关系。接下来,我们从源码角度来分析这种关系是如何建立的。
public Handler(Looper looper, Callback callback, boolean async) {
mLooper = looper;
mQueue = looper.mQueue;
mCallback = callback;
mAsynchronous = async;
}
hander的其它构造方法可以自己去查看,通过这个构造方法,我们知道,handler持有MessageQueue的引用。所以可以方便
地将Message加入到队列中去。
通过源码我们发现,sendMessage->sendMessageDelayed->sendMessageAtTime->enqueueMessage
public boolean sendMessageAtTime(Message msg, long uptimeMillis) {
MessageQueue queue = mQueue;
if (queue == null) {
RuntimeException e = new RuntimeException(
this + " sendMessageAtTime() called with no mQueue");
Log.w("Looper", e.getMessage(), e);
return false;
}
return enqueueMessage(queue, msg, uptimeMillis);
}
都是通过enqueueMessage将message将加入到MessageQueue中。
接下来,我们看Message是如何构造的。通过Message的构造方法。
public static Message obtain() {
synchronized (sPoolSync) {
if (sPool != null) {
weixin_38526612
- 粉丝: 7
- 资源: 892
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0