android进程通信值Messenger和AIDL的区别

Android 用AIDL和Messager的方式 实现 跨进程通信 Android 进程间通信实现方式aidl 或者 messager,客户端可传递(基础数据,序列化对象)到服务端,服务端处理后,返回结果给客户端 立即下载

最近做项目需要使用进程间通信,大家知道应用层的进程间通信无非Broadcast,Activity,Service,Content Provider四大组件。Broadcast适用于一对多,我这里是一对一(子进程与主进程)的关系,且Broadcast性能较差,所以不用Broadcast。另外Content Provider主要用户本地持久化数据的通信,我这里主要是内存级别的数据,所以也不用Content Provider。Activity使用Intent进行进程间通信,使用的时候还需要start Activity,且不能持续通信,不能满足需求。剩下的只有Service了,而Service也恰恰是最合适的。

使用Service进行进程间通信,一种方法是start Service,这和start Activty一样,不用这种方法。另一种方法是bind service,这种可以持续通信,我们采用这种方式来进行进程间通信。

说到bind service进行进程间通信,大家都会想到AIDL(Android Interface Definition Language)和Messenger,那它们两个到底有什么异同,哪个更好用,更方便,效率更高呢,这是我接触到它们两个时的疑问,带着这个疑问,我稍稍的研究了一下它们两个,把研究的结果贴在这里,做个备份,以免下次再忘掉。

结论:

1. Messenger本质也是AIDL,只是进行了封装,开发的时候不用再写.aidl文件。

结合我自身的使用,因为不用去写.aidl文件,相比起来,Messenger使用起来十分简单。但前面也说了,Messenger本质上也是AIDL,故在底层进程间通信这一块,两者的效率应该是一样的。

2. 在service端,Messenger处理client端的请求是单线程的,而AIDL是多线程的。

使用AIDL的时候,service端每收到一个client端的请求时,就会启动一个线程(非主线程)去执行相应的操作。而Messenger,service收到的请求是放在Handler的MessageQueue里面,Handler大家都用过,它需要绑定一个Thread,然后不断poll message执行相关操作,这个过程是同步执行的。

3. client的方法,使用AIDL获取返回值是同步的,而Messenger是异步的。

Messenger只提供了一个方法进行进程间通信,就是send(Message msg)方法,发送的是一个Message,没有返回值,要拿到返回值,需要把client的Messenger作为msg.replyTo参数传递过去,service端处理完之后,在调用客户端的Messenger的send(Message msg)方法把返回值传递回client,这个过程是异步的,而AIDL你可以自己指定方法,指定返回值,它获取返回值是同步的。

其实,第二点是有办法解决的,在service端,Messenger的Handler可以只当作一个转发器,不处理请求,只转发请求到相应的处理线程(多是相应的HandlerThread),这样也可以达到异步的效果。

那我最后选用了什么呢?我选用了AIDL,主要是因为第三点Messenger无法满足需求,还有就是Messenger其实是封装了一下AIDL,我们也可以封装一下呀,既能实现Messenger那样简洁的效果,也能满足同步获取返回值的问题,这个后面再说。

PADS Layout中快速导入自定义元器件封装的实用技巧 本文详细介绍了在PADS Layout中高效导入自定义元器件封装的实用技巧。针对封装“找不到”、“对不上”、“导不进”三大痛点,系统梳理了从封装文件来源识别、库规划管理,到三种核心导入场景(从库文件添加、从其他设计借用、处理第三方格式)的完整操作流程,并提供了导入后的关键验证清单与常见问题排查方法,旨在帮助硬件工程师快速掌握这一提升设计效率的关键技能。 阅读详情

相关推荐

单细胞数据导入实战:Read10X函数常见报错与解决方案

本文针对单细胞转录组分析中Read10X函数数据导入的常见问题,提供了详细的实战解决方案。重点解析了因文件路径错误、压缩文件未解压、版本命名不符及内存不足导致的报错,并给出了检查路径、正确解压、重命名文件、调整参数及优化内存等具体操作步骤,帮助用户高效完成单细胞数据导入,为后续分析奠定坚实基础。

weixin_28235513的博客 237

Messenger与AIDL的异同

最近做项目需要使用进程间通信,大家知道应用层的进程间通信无非Broadcast,Activity,Service,Content Provider四大组件。Broadcast适用于一对多,我这里是一对一(子进程与主进程)的关系,且Broadcast性能较差,所以不用Broadcast。另外Content Provider主要用户本地持久化数据的通信,我这里主要是内存级别的数据,所以也不用Conte...

dawuafang 293

SLG项目开发经验二_大地图设计与实现

本文深入探讨了SLG游戏大地图设计与实现的关键技术,包括网格化业务框架、AOI系统优化、边界处理方案以及行军系统实现。通过Unity引擎的实践案例,详细解析了大地图性能优化的核心策略,如分块加载、GPU Instancing和差异同步协议,为SLG项目开发提供宝贵经验。

weixin_29001419的博客 216

进程间通信之AIDL和Messager

看附件

pengzhihao3399的专栏 229

智能安防摄像头埋点实践:用户行为与设备状态的闭环监控(含AI事件)

智能安防摄像头埋点闭环体系设计及应用实践 摘要: 本文系统阐述了智能安防摄像头埋点闭环体系的设计与实践。首先分析了传统埋点的不足及闭环埋点的价值,提出由用户行为埋点、设备状态埋点和AI事件埋点构成的三维埋点体系框架。详细介绍了闭环监控的四大流程:数据采集、汇聚清洗、分析建模和智能决策。通过误报优化、个性化策略等案例展示了AI事件闭环的实际应用价值,并探讨了隐私合规、性能优化等关键挑战的解决思路。最后展望了端侧AI增强、预测型埋点等未来发展趋势。该体系实现了从数据采集到业务决策的完整闭环,有效提升了AI模型性

专注智能硬件软硬件产品经理成长与实战,分享从需求定义到量产落地的真实日记。涵盖IoT趋势洞察、研发协作经验、产品方法论与工具箱,用轻松有趣的“汪式”视角,陪伴产品经理成长、避坑与升级。 1046

手把手教你设计T型和Π型衰减器:从分贝计算到电阻选型全攻略

本文提供了一份T型和Π型衰减器的详细设计指南,涵盖从分贝计算到电阻选型的全过程。文章以50欧姆系统为例,通过公式推导和实例演示,手把手教你计算两种经典拓扑的电阻值,并深入探讨了电阻选型、误差控制及高频应用等关键实践技巧,帮助工程师和爱好者精准实现信号衰减与阻抗匹配。

blue42的博客 1330

Messenger与AIDL的区别

大家都知道目前安卓的各种第三方推送服务都是采用多路复用的技术,即多个app共享一个后台service,一条长连接处理多个app的推送任务。 那么移动的aoe推送也是采用这种方案,在这里分享下研究结果。 进程间通信,一般有两种方式AIDL和Messenger。 1. Messenger是对AIDL的一种封装,开发的时候不用再写.aidl文件。 结合我自身的使用,因为不用去写.aidl

王凯旋的博客 776

2022年8月27日全国青少年信息素养大赛Python编程小学组决赛真题+答案解析

2022年8月27日全国青少年信息素养大赛Python编程小学组决赛真题+答案解析

伶俐角少儿编程 454

【Android】IPC 之 AIDL、Messenger 、Binder 浅析

- 使用 Binder 类实现绑定服务和**同进程**组件之间的通信 - 使用 Messenger 实现绑定服务和**不同进程**组件之间的通信 - 使用 AIDL 实现绑定服务和**不同进程**组件之间的通信

yang553566463的博客 797

HQChart实战教程54:Renko砖形K线图实现详解

Renko图(砖形图)起源于日本,只关注价格变动而忽略时间和成交量因素: 2.2 算法说明 初始化:使用第一根K线的收盘价创建第一个砖块 变动检测:计算当前价格与最后一个砖块的差值 砖块生成: 当价格变动≥砖块大小时,生成新砖块 当价格变动不足时,更新当前砖块的高低价 方向判断:根据价格变动方向确定砖块颜色 三、完整实现代码 四、Renko图的高级应用 4.1 动态砖块大小调整 4.2 Renko交易策略 三砖反转策略:趋势跟踪策略:本文详细介绍了Renko图的实现原理和在HQChart中的应

QQ_778132974的博客 871

CMake入门教程【基础篇】在Windows、Linux上安装CMake

CMake如何下载与安装

小鱼酱的博客 2725

Messager与AIDL的区别

1.Messenger的本质也是AIDL,只不过Messenger对其进行了封装,在操作的时候不用再写.aidl文件。 因为在使用Messenger的时候不用写aidl文件,所以使用Messenger是非常简单方便的,但是因为Messenger是对AIDL的封装,所以在底层进程通信上,两者的效率应该是差不多的。 2.在service端,Messenger处理client的请求是单线程的,AIDL是多线程的。 AIDL当service端收到一个请求时,就会启动一个线程,不是主线程,对其进行处理,而Messen

weixin_42339486的博客 739

USB驱动(URB)

本文介绍了Linux内核中USB驱动开发的核心概念URB(USB Request Block)。URB是主机与USB设备间传输数据的抽象结构体,包含目标设备、端点信息、数据缓冲区等关键字段。文章详细解析了URB的生命周期(分配、填充、提交、回调、释放)、四种传输类型(控制、批量、中断、等时)及其应用场景,并提供了鼠标设备的中断传输示例代码。最后强调了URB使用注意事项,包括DMA缓冲区分配、错误处理和资源释放等。URB作为USB驱动与内核通信的桥梁,是构建稳定USB驱动程序的基础。

m0_49476241的博客 915

Android进程通信机制终极指南:Binder、AIDL、Messenger深度对比分析

在Android开发中,进程通信机制是构建复杂应用架构的核心技术。本文通过Awesome-Android-Interview项目中的专业资料,为你深度解析Binder、AIDL、Messenger这三种核心IPC方式的原理、性能差异和实际应用场景。 ## 📊 Android进程通信方式全景图 Android平台提供了多种进程间通信方式,每种方式都有其独特的优势和适用场景: [![Andro

gitblog_01193的博客 478

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【Android】进程通信IPC——Messenger

Messenger可以说是信使,用于不同进程间通信。Messenger是轻量级的IPC,内部是使用了AIDL。 服务端 创建Service,使用Handler参数的Messenger构造方法,具体的数据获取等操作放在Handler#handleMessage()方法中。 public class MessengerService extends Service { private stat...

林zero的专栏 251

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

进程通信---Messenger

一.Messager介绍 Messager,故名思义信使的意思,能够完成跨进程通信。和Service结合使用(服务器端是个service,得在Manifest文件中注册哦) Messenger与Handler类似,可以用它来发送和处理消息,其底层的实现是对Binder,对ALDl的一个简单封装。(Messenger是对AIDL的封装,AIDL又是基于Binder机制实现的) 使用起来也比较简洁,在一个线程中通过指定一个Handler来创建Messenger,并把它传递给另一个进程,这样两个进程之间就可以通过

weixin_50005657的博客 643

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Android 之 IPC 进程通信全解析

Android 之 IPC 进程通信全解析本篇博客的框架什么是IPCIPC(Inter-Process Communication) 进程间通信,是指两个不同进程之间数据交换的过程。在明确其之前,需要先搞懂几个概念: 线程:CPU可调度的最小单位,是程序执行流的最小单元;线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属

茅屋 6740

Android跨进程通信Binder、Messenger、AIDL汇总

 前言 提到的进程间通信(IPC:Inter-Process Communication),在Android系统中,一个进程是不能直接访问另一个进程的内存的,需要提供一些机制在不同的进程之间进行通信,Android官方推出了AIDL(Android Interface Definition Language),它是基于Binder机制的,具体Binder机制的东西就很多了,网上很多资料,我们就不...

Veer的博客 1364

AIDL学习总结

前言 参考内容: 慕课网视屏教程http://www.imooc.com/learn/606 某大神博客http://blog.youkuaiyun.com/luoyanglizi/article/details/51980630 本人菜鸟Android开发,平常开发中吧,对这一块了解很少,面试呢又总被问到,肯定说不出一二,主要归结是自己太菜,知识面太窄。学习了网上各大神博客,总结下自己的学习重

ysc123shift的博客 548

Android多线程/进程通信(Socket/IPC/Binder/AIDL/Messenger Demo),多进程的坑

-- 进程与线程: 进程是对运行时程序的封装,可以保存程序的运行状态,实现操作系统的并发; 线程是进程的子任务,保证程序的实时性; 进程是操作系统资源的分配单位,线程是CPU调度的基本单位; 进程让操作系统的并发性成为可能,而线程让进程的内部并发成为可能。 线程从创建、运行到结束总是处于下面五个状态之一:新建状态、就绪状态、运行状态、阻塞状态及死亡状态。Android多线程的多种方式: ...

ShareUs的专栏 3795

Android 进阶13:几种进程通信方式的对比总结

不花时间打基础,你将会花更多时间解决那些不必要的问题。 读完本文你将了解: RPC 是什么 IDL 是什么 IPC 是什么 Android 几种进程通信方式 如何选择这几种通信方式 ThanksRPC 是什么RPC 即 Remote Procedure Call (远程过程调用) 是一种计算机通讯协议,它为我们定义了计算机 C 中的程序如何调用另外一台计算机 S 的程序,让程序员不需要操心底层网络协

张拭心的博客 shixinzhang 4万+

AIDL、Binder、进程间通信方法

AIDL: AIDL可以作为客户端服务端连接,也可以访问系统里未对外暴露的api(比如挂断电话) 原理如下:   编写AIDL文件需注意以下几点:   实现进程通信:   AIDL默认支持传递基本类型,如要自定义传递类型:     AIDL中所指的服务端和客户端(访问者)之间的通信指的是两个应用之间的通信,并不是web中的Service和Client的通信。 ...

a83350695的博客 441

Android学习- 进程间通信之Messenger

作者: 桂志宏 进程和线程 在操作系统课程中,进程和线程是两个非常重要的概念。为此,在讨论Android进程间通信前,我们先简单回忆一下进程和线程的概念。 进程: 简单来说,进程是指正在运行的程序实体。它是一个活动实体,不是指存储在磁盘上的程序代码,例如当你在磁盘上安装了“愤怒的小鸟”游戏,当你双击启动游戏时就开启了一个进程。 此外,进程不仅仅指代码,还包括程序运行需要的堆栈段和数据段...

u014595623的博客 465

随笔Android IPC进程通信之——Messenger

随笔Android IPC进程通信之——Messengerandroid中用于进程通信和数据共享的方式有多种,最基本的Bundle,文件共享,Messenger,AIDL,ContentProvider,Socket等,他们的区别和使用场景这里就不再说了,详情自行查看了解了解,本文直接介绍方式之一Messenger(信使)的使用方式。代码为例,开始看看我们遇到的问题,模拟多进程数据同步问题1.新建一

JFrosty的专栏 406

关于android进程间通信(handler、messenger、AIDL)

关于进程间通信,首先需要思考几个问题:   1.进程间通信适用什么场合? 2.进程和线程区别是什么? 3.Handler用于线程间通信,可以实现进程间通信吗? 4.跨进程通信messager 5.跨进程通信AIDL 就按照上边的步骤我们去开始了解并且熟悉进程间通信。 1.进程间通信 进程间通信就是在不同进程之间传播或交换信息,那么不同进程之间存在着

crazymaple213的专栏 4230

Android IPC机制

概念进程间通信方式进程与线程区别1. 进程是资源分配的最小单位, 线程是程序执行的最小单位2. 进程有自己独立的地址空间, 线程没有, 线程使用相同的地址空间共享数据3. CPU 切换一个线程比切换进程花费小4. 创建一个线程比进程开销小5. 线程占用的资源要比进程少很多6. 线程之间通信更方便, 进程间通信需要以通信的方式 (IPC) 进行Linux 进程通信方式 (了解)管道信号量消息队列信号共享内存套接字使用场景某些模块由于特殊原因需要运行在单独的进程里。

2401_85969223的博客 685
上一篇: Android View更新和重绘之requestLayout、invalidate与postInvalidate
下一篇: 自定义算法过滤定位点,实现高德轨迹纠偏
王小_
博客等级 码龄11年 28粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值