Android线程间消息传递机制

作者:神秘网友 发布时间:2021-01-12 20:21:19

Android线程间消息传递机制

Android线程间消息传递机制

上图是消息循环的过程,当线程进入Looper.loop()循环之后,会从MessageQueue中阻塞的读取Message,要是MessageQueue中没有消息,会一直阻塞在queue.next的地方,直到从MessageQueue中读取到Message,然后将该Message分发给Message的target,这个target是一个Handler的实例。

Android线程间消息传递机制

上图是Handler中消息分发的机制,当调用dispatchMessage进行消息分发的时候,优先判断Message的callback是否为空,Message的callback是一个Runnable,当我们通过Handler.post发送消息的时候,通常发送的就是这个Runnable(此处的callback),其次Handler会查看全局的mCallback是否为空,要是不为空,会通过mCallback来分发Message,最后是将Message分发给我们重写的handleMessage回掉中进行处理。

Android线程间消息传递机制

上图是Android中线程间消息通信的过程,线程B向线程A发送消息,线程A有两种状态:激活状态和休眠状态。

  • 1. 当线程A中没有消息的时候,线程A就会处于休眠状态,此时线程A会监听eventfd这个变量;
  • 2. 当线程B向线程A的消息队列中写入一条数据的时候,同时线程B也会向eventfd写入数据,从而唤醒线程A从消息队列中读取Message并开始处理。

Android线程间消息传递机制 相关文章

  1. Android应用性能优化实践

    简介: 何杰:UC优视Android技术负责人,专注Android平台应用开发方向;主导过UC浏览器的性能、内存、稳定性、网络优化,增量升级技术攻关,插件平台搭建;目前负责Android UC浏览器的架构优化。 Android应用的卡顿问题非常突出,所有用户都能感觉得到却又很

  2. 最佳实践:如何基于消息服务MNS实现严格有序队列

    简介: 问题背景: 阿里云消息服务提供的队列(queue)主要特点是高可靠、高可用、高并发。每个队列的数据都会被持久化三份到阿里云的飞天分布式平台;其中每个队列至少有2台服务器向外提供服务;同时每台服务器都支持高并发访问。这些分布式特性,也导致了

  3. 热门问题:MNS队列消息计数实现难点浅析

    简介: MNS提供GetQueueAttributes接口,用于获取队列的基本属性信息以及队列的消息数状态(可见消息,不可见消息,延迟消息), 其中返回的消息数 并不是精确值,而是只能反映队列中消息数状态的近似值。很多用户可能都会对消息计数不准确而耿耿于怀,小编

  4. 最佳实践:消息服务中如何多线程共享一个LongPolling

    简介: 背景知识: MNS提供了LongPolling类型的ReceiveMessage的方法,只需要在ReceiveMessage的时候把WaitSecond设为一个1-30之间的数就可以了。使用LongPolling可以让Request一直挂在Server上,等到有Message的时候才返回,在保证了第一时间收到消息的同时

  5. 使命必达--阿里云商用消息服务MNS初探

    简介: 在2015杭州云栖大会上,阿里云飞天事业部资深总监李津发布了一款海量消息,使命必达的消息服务产品(http://www.aliyun.com/product/mns)。该产品能够提供高效,可靠,安全,便捷,弹性扩展的消息服务;能够帮助我们轻松的构建松耦合,高并发的分布式

  6. 最佳实践:如何使用消息服务MNS的ChangeMessageVIsibility

    简介: 一.??背景 阿里云MNS消息服务的规范中,每条Message都有个默认的VisibilityTImeout,worker在接收到消息后,timeout就开始计时了。 如果Worker在timeout时间内没能处理完Message,那么消息就有可能被其他Worker接收到并处理。 Timeout计时的好处是:

  7. 简述AndroidManifest.xml的作用是什么

    作用:1、描述app的包名;2、描述app使用的android系统版本信息;3、描述app本身的版本信息,这样对于同一个app的两个版本,系统就能区分那个是新版本,哪个是旧版本;4、描述应用对外暴露的组件等等。 我们在进行APP开发的时候都会遇到一个文件:AndroidMan

  8. 如何用消息系统避免分布式事务?

    简介: 前阵子从支付宝转账1万块钱到余额宝,这是日常生活的一件普通小事,但作为互联网研发人员的职业病,我就思考支付宝扣除1万之后,如果系统挂掉怎么办,这时余额宝账户并没有增加1万,数据就会出现不一致状况了。 上述场景在各个类型的系统中都能找到相

  9. nginx内部锁的实现

    简介: 多进程或者多线程的程序,涉及到对共享资源的修改,都需要使用到锁。最常见的情况(也一般是然并卵的情况)是对一个全局变量进行++操作,比如有个全局变量i,如果多个线程同时执行i++,教科书已经提到,是会出问题的。因为i++并不是一个原子操作,汇

  10. 你对swoole的进程,线程知道多少

    swoole教程栏目介绍swoole的进程,线程。 推荐(免费):swoole教程 进程 1、进程之间不共享任何状态 2、进程的调度由操作系统完成 3、每个进程都有自己独立的内存空间 4、进程间通讯主要是通过信号传递的方式来实现的,实现方式有多种,信号量、管道、事件

每天更新java,php,javaScript,go,python,nodejs,vue,android,mysql等相关技术教程,教程由网友分享而来,欢迎大家分享IT技术教程到本站,帮助自己同时也帮助他人!

Copyright 2020, All Rights Reserved. Powered by 跳墙网(www.tqwba.com)|网站地图|关键词