导航:首页 > 数据处理 > aidl数据传不过来怎么办

aidl数据传不过来怎么办

发布时间:2024-10-28 15:00:35

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

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

而进程间通信,一般采用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 上实现连接、断开、数据通信

阅读全文

与aidl数据传不过来怎么办相关的资料

热点内容
不想进厂怎么学技术 浏览:370
产品使用说明书用英语怎么写 浏览:706
如何做大数据获客全国招商 浏览:833
excel图表如何增添新数据 浏览:259
怎么把用户转换为产品需求 浏览:620
一起来养猪交易什么时候开放 浏览:952
相机如何添加位置信息 浏览:38
食用菌栽培技术案例怎么写 浏览:951
二手房交易经纪提供什么服务 浏览:287
计算机信息与通信哪个累 浏览:494
后台辅助技术岗是什么 浏览:853
闲鱼认证信息复合是怎么回事 浏览:733
苹果耳机是什么产品 浏览:534
程序计数器为什么加一 浏览:174
北京证券交易所什么时候可以买卖 浏览:785
市场信息中心怎么样 浏览:3
痛风水产品有哪些 浏览:201
保险代理人面试怎么自我介绍 浏览:615
浪琴潜水仿表批发市场多少钱一个 浏览:920
犯人为什么没有户口信息 浏览:524