Android 中常用的跨进程通信和跨线程通信方法总结_android 跨线程消息-程序员宅基地

技术标签: android  

        通常一个APP只运行在一个进程中,一个进程中可包含多个线程,通常是一个主线程(UI线程)和多个子线程(工作线程)。当然一个APP也可以拥有多个进程,最常见的就是通过android:process属性给某个服务Service设置独立进程,用于保活或者解耦等。比如:

 <service
            android:name="com.tencent.smtt.export.external.DexClassLoaderProviderService"
            android:label="dexopt"
            android:process=":dexopt" />

有多个进程和线程就会涉及到跨进程通信或跨线程通信,用户状态同步,UI刷新等。下面介绍几种常用的跨进程通信和跨线程通信方法。通常跨进程通信方法也可以用于线程中通信,只是有点大材小用,看具体业务场景来定。

一、跨线程通信:

  1. Handler和消息队列(Handler and Message Queue):

    • 优点:简单易用,适合在主线程与工作线程之间进行通信。通过Handler发送消息,消息会被放入消息队列中,然后由目标线程的Looper按顺序处理消息。
    • 缺点:不适合高频率的通信,处理大量消息时可能会造成阻塞。
  2. AsyncTask:

    • 优点:方便进行简单的异步操作,在主线程和工作线程之间进行通信。内部封装了Handler和线程池的机制,简化了异步任务的编写。
    • 缺点:适用于轻量级的异步操作,不适合长时间运行的任务。
  3. HandlerThread:

    • 优点:提供了一个带有消息循环的线程,可以方便地在工作线程中处理消息。适合用于需要长时间运行的后台任务。
    • 缺点:需要手动管理线程的生命周期,包括启动、停止和销毁。
  4. BroadcastReceiver和广播(BroadcastReceiver and Broadcast):

    • 优点:适用于跨组件之间的通信,可以在应用内或应用间传递广播消息。可以通过发送广播来触发接收者的响应。
    • 缺点:广播是全局的,可能会导致性能问题和安全风险。对于频繁的通信,建议使用其他方式。
  5. EventBus是一种用于实现发布-订阅模式的开源库
    • 优点:简化了线程间通信:EventBus提供了一种简单的方式来进行线程间通信,开发人员无需手动处理线程切换和消息传递的细节。松耦合的组件通信:通过EventBus,组件之间可以进行松耦合的通信,发送者和接收者之间没有直接的依赖关系。线程切换方便:EventBus允许在发布事件时指定事件的接收线程,从而方便地在不同线程之间切换。

    • 缺点:难以追踪和调试:由于EventBus采用了发布

二、跨进程通信(IPC): 

        

  1. BroadcastReceiver和广播(BroadcastReceiver and Broadcast):

    1. 优点:适用于跨组件之间的通信,可以在应用内或应用间(跨进程)传递广播消息。可以通过发送广播来触发接收者的响应。
    2. 缺点:广播是全局的,可能会导致性能问题和安全风险。对于频繁的通信,建议使用其他方式。
  2. AIDL(Android Interface Definition Language):

    1. 优点:适用于跨进程通信,支持双向通信和复杂数据类型。可以定义接口和方法,使得进程之间可以调用对方的方法。
    2. 缺点:相对复杂,需要手动编写AIDL文件和实现跨进程通信的逻辑。通过底层Binder机制实现
  3. ContentProvider:

    1. 优点:用于实现数据共享和跨进程通信。可以通过ContentResolver查询、插入、更新和删除数据。
    2. 缺点:相对复杂,需要定义URI和数据访问接口,适用于数据共享而不适用于频繁的通信

      4.Socket通信:

                1.优点:网络通信能力:Socket通信可以在网络层面上进行进程间通信,适用于跨网络的通信需求。广泛支持:Socket是一种标准的通信机制,在不同平台和编程语言中都有广泛的支持。

                2.  缺点:复杂性:使用Socket进行进程间通信需要编写底层网络通信代码,包括建立连接、数据传输和错误处理等,相对复杂。安全性:Socket通信可能面临网络攻击和数据泄露等安全风险,需要进行额外的安全措施。

  1. 5.Messenger:

    • 优点:基于AIDL实现的轻量级进程间通信机制,支持双向通信。通过Handler和Message进行消息传递。

      Messenger是一种轻量级的IPC方案,它的底层实现其实就是AIDL.跨进程通信使用Messenger时,Messenger会将所有服务调用加入队列,然后服务端那边一次处理一个调用,不会存在同时调用的情况.而AIDL则可能是多个调用同时执行,必须处理多线程问题.

      对于大多数应用,跨进程通信无需一对多,也就是无需执行多线程处理,此时使用Messenger更适合.

    • 缺点:只支持一对一的通信,不能实现一对多的通信。

        

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/HuanWen_Cheng/article/details/132710767

智能推荐

MySQL 慢查询-程序员宅基地

文章浏览阅读1.2w次,点赞7次,收藏41次。一、什么是慢查询慢查询,顾名思义,执行很慢的查询。有多慢?超过long_query_time参数设定的时间阈值(默认10s),就被认为是慢的,是需要优化的。慢查询被记录在慢查询日志里。慢查询日志默认是不开启的。如果需要优化SQL语句,就可以开启这个功能,它可以让你很容易地知道哪些语句是需要优化的。1️⃣show variables like 'slow_query_log';查询是否开启慢查询日志【开启慢查询sql:set global slow_query_log = 1/on;】【关闭慢查询sq_慢查询

redis-shiro session 共享 session, SimpleSession序列化大坑_shiro simplesession-程序员宅基地

文章浏览阅读1.7k次,点赞2次,收藏7次。shiro 通过redis实现session共享共享Session目的在分布式服务的工程中,一个服务器断了,负载均衡服务器会把请求分配给其他的服务器,如果设置了session共享,就不需要用户再次登录了.shiro实现session共享的原理默认的情况下,shiro的session是在服务器上的,当该服务器宕掉了,session就不存在了,用户必须重新登录,如果我们把shiro的session存到redis服务器上,就可以实现session共享了.如何实现?如果我们想通过redis实现shiro_shiro simplesession

2019高教杯数学建模B题赛后感_2019数学建模b题“同心协力”-程序员宅基地

文章浏览阅读6.2k次,点赞10次,收藏27次。虽然已经11月了,离数学建模成绩出来已经很久,但是之前一直忙着做项目,忘记写了,然后简单讲一下经历 ,比赛是中秋放假那三天,别人回家的回家,我们交了300块在实验室里面肝,唉,作孽啊。讲一下前提哈,我们学校今年特别dog,往年一般都会有暑假的数学建模培训,虽然没啥用,但起码有啊,今年他就没了,他就没了。。。。你信嘛,然后结果出来我们学校很理所应当地没有一个队伍拿国奖。我运气好,勉强拿了个省二,还..._2019数学建模b题“同心协力”

如何用javascript操作本地文件(读写txt文件) _ts读取本地txt-程序员宅基地

文章浏览阅读1.8w次。版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://pp99nn.blogbus.com/logs/46943583.htmljavascript在浏览器本地和与服务器通讯方面都有优异的表现。使用javascript对本地文件进行操作实际上是有一点技术后退的感觉。毕竟桌面应用程序微软的、java的已经相当成熟了。不过用javascript做点小程序来处理本地事务,在没有java或者MFC开发环境的时候还是很方便的。_ts读取本地txt

数字图像处理第三版(冈萨雷斯)——第二章数字图像基础_数字图像处理电子书-程序员宅基地

文章浏览阅读2k次,点赞3次,收藏9次。数字图像处理(冈萨雷斯)——第二章数字图像基础一、视觉感知要素1.1人眼的结构1.2亮度适应和辨别二、光和电磁波谱三、图像感知和获取四、图像取样和量化五、像素间的一些基本关系六、数字图像处理所用数学工具介绍一、视觉感知要素虽然数字图像处理这一领域建立在数学和概率公式表示的基础上,但人的直觉和分析在选择一种技术而不选择另一种技术时会起核心作用,这种选择通常是基于主观的视觉判断做出的。1.1人眼的结构人眼分辨细节的能力与当前电子传感器是可以类比的眼睛由三层膜包裹:角膜与巩膜外壳、脉络膜和视网膜。_数字图像处理电子书

classdump-dyld / iphoneheaders / iOS7.0.3 / System / Library / Internet Plug-Ins / QuickTime Plugin._classdumpdyld-程序员宅基地

文章浏览阅读2.4k次。https://github.com/limneos/classdump-dyld/blob/master/iphoneheaders/iOS7.0.3/System/Library/Internet%20Plug-Ins/QuickTime%20Plugin.webplugin/FigPluginView.h_classdumpdyld

随便推点

软件架构, 软件框架,设计模式的区别_比较架构模式,设计模式,惯用法的区别和联系-程序员宅基地

文章浏览阅读1.8k次,点赞4次,收藏7次。已剪辑自: https://www.cnblogs.com/lsm-boke/p/12657791.html一、架构**架构即软件架构,**是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。软件体系结构是构建计算机软件实践的基础,简单来说,软件架构是一个系统的草图,是一种设计方案,将客户的不同需求抽象成为抽象组件,各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。_比较架构模式,设计模式,惯用法的区别和联系

文本挖掘入门-程序员宅基地

文章浏览阅读1.1k次,点赞4次,收藏23次。总之,词嵌入是一种有助于RNN模型理解文本语义的技术,而RNN则用于在文本生成任务中考虑文本的顺序和上下文信息,从而生成连贯的文本。文本挖掘是从文本数据中提取有用信息的过程,通常包括文本预处理、特征提取和建模等步骤。:选择合适的机器学习或深度学习算法,根据任务类型进行建模,例如文本分类、情感分析、主题建模等。:使用标注好的数据集训练模型,并使用评估指标(如准确度、F1分数、均方误差等)来评估模型性能。函数将使用RNN模型生成文本,它会根据先前生成的文本以及上下文信息来预测下一个单词。_文本挖掘

oracle 表空间和数据文件管理 移动数据文件 重命名数据文件 数据文件重命名_如何使用oracle创建表空间,数据文件命名为-程序员宅基地

文章浏览阅读2.7k次。oracle 11g2 一个数据文件在同一个时刻仅属于同一个表空间,仅属于同一个数据库。TEMP文件是一类在临时表空间中被使用的特殊数据文件。 当数据库创建或重用i一个数据文件——操作系统文件被重用和初始化——被一个规则的二进制零所填充。这些初始化不会发生在临时文_如何使用oracle创建表空间,数据文件命名为

语法篇-JSON基础_json语法-程序员宅基地

文章浏览阅读2.4k次,点赞3次,收藏14次。script>name : '烟雨平生',age : 20,sex : "男"_json语法

python编辑视频教程_Maya中Python编辑基础核心技术训练视频教程-程序员宅基地

文章浏览阅读140次。本教程是关于Maya中Python编辑基础核心技术训练视频教程,时长:超过20小时,大小:3.1 GB,MP4高清视频格式,教程使用软件:Maya,附源文件,作者:Geordie Martinez,共8个章节,语言:英语。分享Autodesk Maya是美国Autodesk公司出品的世界顶级的三维动画软件,应用对象是专业的影视广告,角色动画,电影特技等。Maya功能完善,工作灵活,易学易用,制作效..._learn python inside maya

hcip3_interface tunnel1-程序员宅基地

文章浏览阅读111次。要求:1.R4为ISP,其上只能配置IP地址,R4与其他所有直连设备间使用公有IP;解决ospf不规则区域的3种方式都得使用.2.整个osPF环境p地址为172.16.0.0/16进程1oo使用192.168.1.0/243.所有设备均可访问R4的环回r14上有两个环回减少LsA的更新量,加快收敛,保障更新安全4.全网可达解决不规则区域的三种方式1.Tunnel在两台ABR上创建tunnel,然后将其宣告到OSPF协议中;缺点:1、选路不佳 2、周期hello和更新均对中间区域进行影响._interface tunnel1

推荐文章

热门文章

相关标签