在使用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
2. Aidl传输对象时修饰符 in、out、inout:在Aidl接口中,需要使用修饰符in、out和inout来指定参数的传输方向。 3. 对实现Parcelable接口对象中需要实现方法深入了解:在使用Aidl技术时,需要实现Parcelable接口来...
默认情况下,所有参数都是输入参数,除非你使用`in`, `out`, 或 `inout`关键字明确指定。 4. **返回值**:AIDL中的方法可以有返回值,但不能是自定义类型,只能是基本类型或者null。 5. **异常处理**:AIDL不支持...
在这个例子中,我们定义了一个名为`Rect`的类,它实现了`Parcelable`接口,从而使得该类的对象可以通过AIDL进行序列化和反序列化操作。 ### 总结 通过本文的介绍,我们可以看到AIDL IPC机制在Android开发中的重要...
2. 参数的传输类型:对于基本数据类型,默认为in类型,非基本类型的对象需标记为in、out或inout。in表示只读,由调用者传入;out表示只写,由服务端填充后返回;inout则同时具有读写属性。 3. 接口名和AIDL文件名...
4. **方向标识符**:`in`表示参数由调用方传递给服务方,`out`表示参数由服务方返回给调用方,`inout`则同时包含输入和输出。 **AIDL实例分析** 根据提供的压缩包文件名,我们可以推测这是一个包含AIDL服务端(AIDL...
- 参数传递方式默认为传值,如果需要引用传递,可以使用 `in`, `out`, 或 `inout` 关键字。 2. **服务端实现**: - 创建 Aidl 接口,并在服务类中实现该接口。 - 在服务的 `onBind()` 方法中返回实现了 Aidl ...
注意,`in`关键字表示参数传递到服务端,而`out`关键字表示服务端将结果传出给客户端。 在服务端,我们需要实现这个接口。在`RemoteService`类中,我们看到`onBind`方法返回了两个接口的实现,`IRemoteService.Stub...
String complexMethod(in String input, out int output); } ``` 这将生成两个Java类:`IAIDLTest.java`(服务端接口)和`IAIDLTestStub.java`(客户端代理)。服务端需要实现`IAIDLTest`接口,而客户端通过`...
- 参数类型需要指定传输方向(`in`、`out`、`inout`),Java原始类型默认为`in`。 通过遵循这些步骤和注意事项,开发者可以利用AIDL实现Android应用间的高效跨进程通信,使得服务可以在不同的进程中被其他应用调用...
AIDL还支持接口回调,通过定义`in`、`out`、`inout`参数来实现。同时,AIDL不直接支持异常处理,但可以通过指定返回值为`Parcel`类型,然后在`Parcel`中封装异常信息,让客户端自行处理。 **优化与注意事项** 1. *...
void getQuote(String symbol, in out Stock stock); } ``` 在这个例子中,`IStockQuote`接口定义了一个`getQuote`方法,该方法接收一个股票代码(`String symbol`)和一个`Stock`对象。`in`关键字表示参数是传入...
void sendData(in MyParcelable data, out int result); ``` **使用步骤** 1. **创建AIDL文件**:在项目的src/main/aidl目录下创建AIDL文件,定义接口。 2. **编译AIDL**:Android Studio会自动编译AIDL文件,...
解决这个问题的关键在于,Map应该被声明为非泛型类型,并且在参数前添加关键字`in`、`out`或`inout`来指定数据流动的方向。正确的做法如下: ```aidl interface IMyAidl { void test(in Map datas); } ``` 这里,...
相比之下,`Parcelable`是Android平台特有的一种高效序列化方式,专为Android系统内部数据传输设计,如在Activity之间传递数据或通过AIDL(Android Interface Definition Language)进行进程间通信。由于`Parcelable...
但Android AIDL不支持`out`和`inout`参数,所有参数默认按`in`处理。 当AIDL文件被编译后,Android Studio会自动生成对应的Java代码。生成的代码主要包括三个类: 1. **IBookManager**:接口类,继承自`android.os....
4. **方向关键字**:in表示参数由调用者传入,out表示返回结果,inout表示既作为输入又作为输出。 ### 使用步骤 1. **创建.aidl文件**:在项目的src/main/aidl目录下创建一个.aidl文件,定义接口。 2. **编译生成...
4. 定向 Tag 用于标注方法的参数值,分为 in、out、inout 三种。 5. 明确导包。在 AIDL 文件中需要明确标明引用到的数据类型所在的包名,即使两个文件处在同个包名下。 在服务端编码中,我们可以使用 AIDL 来定义...
5. **处理数据传输**:由于AIDL支持基本数据类型和Parcelable接口的类,所以自定义的数据结构(如`WeatherData`)需要实现`Parcelable`接口,以便在进程间传输。 6. **错误处理**:跨进程通信可能会遇到异常,如...