在使用aidl传输数据时,对于非基本数据类型,也不是String和CharSequence类型的,(即Parcelable类型)需要有方向指示,包括in、out和inout。
下表为in,out在远程传输的作用
|
Stub.ontransact() |
Proxy.callback(Data data) |
in |
接收远程传输的数据(Data) |
输入本地数据(Data) |
中间过程 |
本地调用(修改Data) |
远程调用(给远程传输Data) |
out |
将经过本地调用修改过后的Data,返回给远端 |
获取远程调用之后,传输过来的远端数据(Data) |
测试数据:
a、server in client in
03-07 14:23:13.250: I/System.out(16307): client in: ZLData [data=Client]
03-07 14:23:13.250: I/System.out(16579): Server in: ZLData [data=Client]
03-07 14:23:13.250: I/System.out(16579): Server out:ZLData [data=server]
03-07 14:23:13.250: I/System.out(16307): client out: ZLData [data=Client]
b、server in client out
03-07 14:22:00.980: I/System.out(16009): client in: ZLData [data=Client]
03-07 14:22:00.980: I/System.out(16050): Server in: null
03-07 14:22:00.980: I/System.out(16050): Server out:ZLData [data=server]
03-07 14:22:00.980: I/System.out(16009): client out: ZLData [data=Client]
c、server out client in
03-07 14:22:37.170: I/System.out(16307): client in: ZLData [data=Client]
03-07 14:22:37.170: I/System.out(16421): Server in: ZLData [data=]
03-07 14:22:37.170: I/System.out(16421): Server out:ZLData [data=server]
03-07 14:22:37.170: I/System.out(16307): client out: ZLData [data=Client]
d、server out client out
03-07 14:21:15.640: I/System.out(8592): client in: ZLData [data=Client]
03-07 14:21:15.640: I/System.out(15762): Server in: ZLData [data=]
03-07 14:21:15.640: I/System.out(15762): Server out:ZLData [data=server]
03-07 14:21:15.640: I/System.out(8592): client out: ZLData [data=server]
如果client不需要传输数据给server,client只需要处理经过server处理过后的数据,
那么 client 和 server 都为 out
如果client只需要传输数据给server,而不需要处理返回的数据,
那么client和server都为 in
如果client需要传输数据给server,而且需要处理返回的数据,
则client和server都为 inout
in,out会影响进程间传输的数据完整性
具体详细查看配置不同的in、out 的情况下,aidl生成对应的java文件中
Stub.ontransact()
和
Proxy.yourMethod();
这两个类的实现(in、out、inout 里面实现都不相同)
分享到:
相关推荐
Android远程接口之AIDL——Parcelable、in、out、inout简例 Parcelable in out inout AIDL例子中体现使用方式 详细介绍: http://blog.csdn.net/yangzhaomuma/article/details/50576017
Android多进程通讯AIDL传递Parcelable对象
android通过aidl传递Parcelable对象
NULL 博文链接:https://lichunan-d-163-com.iteye.com/blog/1568506
android下aidl的使用demo,Parcelable复杂对象的使用
aidl案例小分析 in out inout 自定义类型传输,主要针对aidl的客户端与服务端通信,先打开服务端,操作客户端,查看日志以及界面即可了解in out inout 区别,分析地址...语言较为混乱,java和kotlin kotlin都是简单的...
Android AIDL传输对象代码 Parcelable 在AIDL client的Activity中点击传输对象按钮查看日志,就会看到对象里面的内容
通过客户端和服务端,演示如何通过aidl实现进程间通信,及如何传递Parcelable数据
Android Aidl跨进程访问parcelable接口数据,简单封装了下AIDL作为一个library被其他3个app引用,实现3个app共用一个服务,3个app中任意打开一个app开启服务,其他两个app共用此服务获取接口数据。
在studio上写的一个完整的AIDL Demo,里面有客户端和服务端两个应用,通过AIDL传递parcelable对象,具体看代码,已删除build目录,所以包比较小,下下来之后需要先编译一下,compileSdkVersion 26,targetSdkVersion ...
Android AIDL 实现应用间数据交换(包括Parcelable数据)CSDN主页:http://blog.csdn.net/hcb1230
压缩中有两个项目,一为...master分支对应博客:你真的理解AIDL中的in,out,inout么? simple分支对应博客:Android:学习AIDL,这一篇文章就够了(上) 两篇博客均在:http://blog.csdn.net/luoyanglizi 处可找到。
在目录src/main 下新建了aidl 文件夹之后,在aidl文件夹中也创建了相同的包路径, ...parcelable Model; 如果编译的时候提示AIDL文件引用的包找不到的话 要在build文件中声明以下内容: android { ... sourceSets
AIDL例子源码AIDL例子源码AIDL例子源码
ITelephony.aidl和NeighboringCellInfo.aidl
目前我使用过的AIDL,主要可以分为三大场景:普通AIDL、带有远程回调接口的AIDL和需要引用自定义Parcelable的AIDL,针对三类场景我分别写了个例子。
android aidl 本地和aidl通信,远端和aidl android aidl 本地和aidl通信,远端和aidl
传递复杂数据的AIDL服务 服务端的示例程序,这个是服务器端,与ch08_complextypeaidlclient工程配合使用
Android AIDL Binder 实现与详解。此资源实现了 Android AIDL 通信,自定义 AIDL 数据类型。同时演示了定向 Tag 『inout in out』的区别。并且配有博文详细解释相关知识点以及需要注意的细节。
AIDL