如果一个Activity有多个handler时候,handler1发送的消息是否会被handler2接收,同理handler2发送的消息是否会被handler1接收?
答案是:不会,一句话谁发送的消息,谁处理,为什么,因为每个Message消息都会绑定一个target来指定这个消息由谁来处理。

1 Message消息在被发送时会被绑定Handler

追溯源码发现,无论使用Handler的哪个方法来发送消息,最终都会调用到下面方法来发送,在这里 msg对象会被绑定target,而这里的值为this,正是发送消息的Handler的本身,

private boolean enqueueMessage(MessageQueue queue, Message msg, long uptimeMillis) {msg.target = this;if (mAsynchronous) {msg.setAsynchronous(true);}return queue.enqueueMessage(msg, uptimeMillis);
}
2 Message消息在被处理的时候

追溯源码

 public static void loop() {final Looper me = myLooper();if (me == null) {throw new RuntimeException("No Looper; Looper.prepare() wasn't called on this thread.");}final MessageQueue queue = me.mQueue;// Make sure the identity of this thread is that of the local process,// and keep track of what that identity token actually is.Binder.clearCallingIdentity();final long ident = Binder.clearCallingIdentity();for (;;) {Message msg = queue.next(); // might blockif (msg == null) {// No message indicates that the message queue is quitting.return;}// This must be in a local variable, in case a UI event sets the loggerPrinter logging = me.mLogging;if (logging != null) {logging.println(">>>>> Dispatching to " + msg.target + " " +msg.callback + ": " + msg.what);}msg.target.dispatchMessage(msg);if (logging != null) {logging.println("<<<<< Finished to " + msg.target + " " + msg.callback);}// Make sure that during the course of dispatching the// identity of the thread wasn't corrupted.final long newIdent = Binder.clearCallingIdentity();if (ident != newIdent) {Log.wtf(TAG, "Thread identity changed from 0x"+ Long.toHexString(ident) + " to 0x"+ Long.toHexString(newIdent) + " while dispatching to "+ msg.target.getClass().getName() + " "+ msg.callback + " what=" + msg.what);}msg.recycleUnchecked();}}

msg.target.dispatchMessage(msg); 关键的这一句,msg调用了自身绑定的target的dispatchMessage方法来处理消息,而这里的target正是msg在被发送的时候所绑定的handler.

Android一个Activity多个Handler时,Message消息是否会混乱?相关推荐

  1. 【Android 异步操作】手写 Handler ( 总结 | Message | MessageQueue | Looper | Handler ) ★

    文章目录 一.Message 消息 二.Handler 消息处理者 三.MessageQueue 消息队列 四.Looper 循环者 五.关于 Looper 线程本地变量的说明 一.Message 消 ...

  2. Android的消息处理机制——Looper,Handler和Message浅析

    题外话: 说来有些惭愧,对于这三者的初步认识居然是在背面试题的时候.那个时候自己接触Android的时间还不长,学习的书籍也就是比较适合入门的<疯狂Android讲义>,当然在学到Hand ...

  3. android 一个activity定时更新另一个activity的UI

    在开发软件的过程中,客户提出了一个要求,就是在Mainactivity的一个按键button按下之后进入另一个OtherActivity,在这个OtherActivity完成了功能之后,按键butto ...

  4. Android 一个Activity 里面放置多个 Fragment 实现点击切换的Tab 页面效果

    // BaseActivity 是实现的一些公共的变量和方法,可以暂时为空的类 public class HomeActivity extends BaseActivity implements Vi ...

  5. Android开发 ---多线程操作:Handler对象,消息队列,异步任务下载

    效果图: 1.activity_main.xml 描述:定义了六个按钮 <?xml version="1.0" encoding="utf-8"?> ...

  6. Android 一个activity 加载一个Fragment

    这个方法也是很简单,代码如下 2中方法一种方法分开写的,另外一种方法是链表的形式. public class SingleActivity extends AppCompatActivity {pri ...

  7. 大叔也说Xamarin~Android篇~Activity之间传递数组

    大叔也说Xamarin~Android篇~Activity之间传递数组 原文:大叔也说Xamarin~Android篇~Activity之间传递数组 我们在开发应用程序时,不可能只使用一个Layout ...

  8. 【转】android之在activity中控制另一个activity的UI更新_如何在activity之间传递handler...

    来自:http://blog.csdn.net/jason0539/article/details/18055259 遇到一个问题,需要在一个activity中控制另一个acitivity做一些更新, ...

  9. activity销毁时执行执行方法是_[Android开发 VIII ]销毁一个activity

    销毁一个activity一共有两种方法,一种是按下返回键,就可以销毁当前activity:还有一种方法就是通过代码的方式,Android提供了finish()这个方法,调用这个方法也可以完成销毁一个a ...

最新文章

  1. Webpack模块化原理简析
  2. POP缩小区域扩张导致的延迟差距—Vecloud微云
  3. git 使用_git使用指南
  4. SCCM2012升级SP1系列之配置管理SCCM2012①发现和管理SCCM2012客户端
  5. 【机器学习】——《机器学习实战》面试复习
  6. English trip -- VC(情景课)10 C I like to watch TV. 我爱看电视
  7. php 仿高德,仿高德路线规划滑动效果
  8. 中国中小微企业云服务市场专题分析2020
  9. 启动器和选择器学习-----(1)总括
  10. ApacheCN JavaScript 译文集(二) 20211123 更新
  11. Google Colab使用笔记
  12. win10打印机不能服务的问题
  13. SpringBoot+Redis+Lua防止(黑客)IP重复防刷攻击
  14. Scratch的广播与消息
  15. 概率论 方差公式_概率论基本问题
  16. Windows10-查询电脑mac地址
  17. 江苏自考计算机专业,2021年江苏自考本科专业选择:计算机类专业前景如何?有哪些科目?...
  18. 【大学生软件测试基础】三角形类型 - 白盒测试 - 语句覆盖 -02
  19. java 第三方登录之QQ登录
  20. Python 中的字符串有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始。

热门文章

  1. 最新综述|深度学习的单目人体姿态估计
  2. CV Code | 本周计算机视觉新出开源代码汇总(含医学图像分割、神经架构搜索、姿态迁移、超分辨率等)...
  3. 次时代模型的制作 这几个点你真的知道了吗?|附加50g学习资料
  4. 高效新思路!实例分割算法!腾讯、华科出品!入选ICCV 2021!
  5. 新想法!华科、清华、康奈尔联合提出“圆形卷积”!聚合方形和圆形优势
  6. 2018 年最受欢迎的15个顶级 Python 库
  7. 深度学习(四十)优化求解系列(2)简单理解神经网络求解过程-未完待续
  8. centos7开机启动自定义脚本_在Centos 7系统中开启启动自定义脚本的方法
  9. 两边填上相同的数_二年级必考题,在括号里填上相同的数~
  10. 渗透测试入门6之权限提升