设为首页 加入收藏

TOP

Android基础教程:一个activity中多个handler和消息的处理过程
2014-11-24 13:00:18 来源: 作者: 【 】 浏览:0
Tags:Android 基础 教程 一个 activity 多个 handler 消息 处理 过程

因为几乎主要的成员变量都是从Looper中拿出来的,最初以为一个线程中只能有一个handler。后来看构造方法也没有限制,尝试的写了下,发现的确可以实例化多个handler


后来又想,如果两个handler都重写了handleMessage方法,而handleMessage方法之后,消息会从消息队列中移除。那么假设A发送了一个消息,想实现一些功能,但是B却对这个消息进行了处理,那么A中的功能不是无法实现了吗?


重新看了一下消息的分法机制,终于恍然大悟


1、 Handler发送消息的时候


public boolean sendMessageAtTime(Message msg, long uptimeMillis){


...


if (queue != null) {


msg.target = this;// 发送消息的时候会把target设为当前的Handler


sent = queue.enqueueMessage(msg, uptimeMillis);


}


...


}


2、而Looper中的循环


public static final void loop() {


Looper me = myLooper();


MessageQueue queue = me.mQueue;


while (true) {


...


Message msg = queue.next();


...


// 我汗啊… 竟然直接交给了target即发送这个消息的handler处理


msg.target.dispatchMessage(msg);


msg.recycle();


}


}


}


3、这么简单的问题竟然纠结了好久,只能感叹菜鸟真可怕



既然看到这了,就稍微看下dispatchMessage的逻辑吧



-- 如果msg.callback不为空,则调用handleCallback(msg);



如果mCallback不为空,则调用mCallback.handleMessage方法



前边两个都为空的时候,才会调用Handler的handleMessage方法,如果没有重写,则调用系统默认的handleMessage,即什么也不做


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android入门之子线程中Toast 下一篇Android开发教程:签名与发布应用..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·python数据分析岗的 (2025-12-25 10:02:21)
·python做数据分析需 (2025-12-25 10:02:19)
·成为一个优秀的pytho (2025-12-25 10:02:16)
·Java后端面试实习自 (2025-12-25 09:24:21)
·Java LTS版本有哪些 (2025-12-25 09:24:18)