问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Android:AIDL进程间通信基本框架

发布网友 发布时间:2022-09-01 19:05

我来回答

1个回答

热心网友 时间:2024-12-01 19:18

在某些业务场景下,我们需要在应用中单独开启一个进程进行一些操作。比如性能监控,如果让原始业务和性能监控本身的业务跑在同一个进程下,那么就会导致性能统计的数据的失真。

而进程间通信,一般采用AIDL机制的客户端与服务端通信。

AIDL只能传递如下几类数据:

当传递自定义 Parcelable 时,有三处地方需要注意:

当传递其他 aidl 接口时,同样必须要 import 这个 aidl 文件

编写完 aidl 文件后,make一下工程,会在 build 下的 generated 下的 source 下的 aidl 目录生成对应的接口类文件。aidl 接口其实就是 API 接口,通过实现对应接口类的 Stub 子类来实现具体的 API 逻辑;通过对应接口类的 Stub 子类的 asInterface 方法得到具体的实现类,调用具体的 API 方法。

一个基本的客户端服务端的通信结构一般包括如下功能

客户端的功能

服务端的功能

客户端的相关功能实现比较简单,麻烦的是服务端的功能。因为 AIDL 接口定义的都是服务端的接口,是由客户端来调用的。而想要实现服务端反向调用客户端则需要通过其他手段实现。

想要实现服务端主动连接客户端,最好的办法就是服务端发送广播,客户端收到广播后再主动连接服务端,通过这种方式变相地实现服务端主动连接客户端的功能

想要实现服务端主动断开客户端,除了上面发送广播是一种实现方式外,还可以通过 android 的系统API RemoteCallbackList,用包名作为key值来注册远程回调接口的方式,让服务端持有客户端的回调接口,服务端调用回调接口,客户端在回调接口中实现主动断开服务端,通过这种方式变量地实现服务端主动断开客户端的功能。而采用后者会显得更加优雅

既然所有的操作归根结底都是由客户端来完成的,那么客户端必须得有如下的功能模块:

服务端必须得有的功能模块:

那么,整体的通信流程就是如下的步骤:

首先是通信的 aidl 接口定义

然后是客户端的连接操作与断开连接操作,包括广播接收者的注册以及回调接口的实现

然后是客户端的拉取数据和推送数据操作

接着是服务端的 iBinder 接口的实现,完成回调接口的注册、业务子线程的开启和关闭、数据的推送和数据的拉取操作

然后是服务端的主动连接和主动断开连接操作

最后是服务端的 onUnbind 方法的实现,对回调接口进行反注册

服务端模仿 FloatViewPlugin 自定义插件,实现 IServicePlugin 接口,定制个性化的悬浮窗插件

客户端在 Appliaction 的 onCreate方法中初始化

在 MainActivity 上实现连接、断开、数据通信

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
大学中大德指什么 驾考各科通过率是多少 驾考全部一次过的比例 驾考宝典科目一通过率多少 驾考宝典通过率怎么算的 .js 文件和 .mjs 文件的区别 .js是什么文 苹果13在哪切换4G网络 苹果13怎么把5g换成4g?苹果13设置4g网络方法介绍 iphone13如何更改网络信号 iphone13手机5G设置成4G教程 梦见父亲的脚放在我身上 梦见别人拿脚放上我肩上 “荒唐”一词如何造句? 周公解梦之梦见水蛭钻进自己身体 关于澳大利亚和巴西人口和经济的叙述,不正确的是( ) 巴西和澳大利亚有哪些共同的地理特征 华为保修期内换屏幕要钱吗 我们用剩菜剩饭煮成的猪食,究竟叫“猪馊”还是“猪潲”?? s9+三星系统更新有必要吗 婚礼适合放的英文歌曲 感人英文歌曲是用来烘托婚礼氛围有很好效果,婚礼感人英文歌曲都有什么呢... 欢快的婚礼英文歌曲有哪些 男朋友发以下犯上什么意思? 以下犯上是什么意思? 团结的成语精选10句 有别人的,能搜索到快手吗?- 问一问 杯子洗不干净怎么办? 成语形容怕被噎着就不吃食物,是什么成 形容心情不好而导致不吃东西的成语是什么? 读书不吃饭的成语 Binder 总结 2018年—Android面试 梦见别人的脚放到我的被窝里 梦见我的男同事晚上和我在一起,就是脚放在一起,再没别的了。 论文翻译报价多少? 同一时间梦见自己喂好多狼狗吃肉肉和养好多鹰 剪爱是谁写的_剪爱歌词是谁写的 去意大利旅游费用大概是多少? 意大利旅游多少钱 ...马上就要进入大学生活、想知道新生需要注意什么,请前辈们告诉一下... 微信收款码怎么停用 刚上大学的时候我们应该做点什么? QQ空间时间轴怎么弄,别复制,你懂得呀! final cut pro基础教程(32):fcpx如何制作字幕? opporeno6pro看监控都是倒的怎么设置 要怎么治理熊孩子,让熊孩子有礼貌 求 黄绮珊 《剪爱》 空间歌曲链接 要畅通的 梦中故人何时归,不待故人梦以醒是什么意思? 《小鹿斑比》读后感作文 《小鹿斑比》读书笔记400字阅读启发范文