`
hold_on
  • 浏览: 455655 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Aidl Parcelable in out inout 作用

阅读更多
在使用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简例

    Android远程接口之AIDL——Parcelable、in、out、inout简例 Parcelable in out inout AIDL例子中体现使用方式 详细介绍: http://blog.csdn.net/yangzhaomuma/article/details/50576017

    Android深入理解分析Aidl调用作业流程.docx

    2. Aidl传输对象时修饰符 in、out、inout:在Aidl接口中,需要使用修饰符in、out和inout来指定参数的传输方向。 3. 对实现Parcelable接口对象中需要实现方法深入了解:在使用Aidl技术时,需要实现Parcelable接口来...

    android AIDL解析

    默认情况下,所有参数都是输入参数,除非你使用`in`, `out`, 或 `inout`关键字明确指定。 4. **返回值**:AIDL中的方法可以有返回值,但不能是自定义类型,只能是基本类型或者null。 5. **异常处理**:AIDL不支持...

    掌握AIDL IPC机制

    在这个例子中,我们定义了一个名为`Rect`的类,它实现了`Parcelable`接口,从而使得该类的对象可以通过AIDL进行序列化和反序列化操作。 ### 总结 通过本文的介绍,我们可以看到AIDL IPC机制在Android开发中的重要...

    深入解读Android的内部进程通信接口AIDL

    2. 参数的传输类型:对于基本数据类型,默认为in类型,非基本类型的对象需标记为in、out或inout。in表示只读,由调用者传入;out表示只写,由服务端填充后返回;inout则同时具有读写属性。 3. 接口名和AIDL文件名...

    android AIDL简单例子

    4. **方向标识符**:`in`表示参数由调用方传递给服务方,`out`表示参数由服务方返回给调用方,`inout`则同时包含输入和输出。 **AIDL实例分析** 根据提供的压缩包文件名,我们可以推测这是一个包含AIDL服务端(AIDL...

    【aidl demo】音乐播放器

    - 参数传递方式默认为传值,如果需要引用传递,可以使用 `in`, `out`, 或 `inout` 关键字。 2. **服务端实现**: - 创建 Aidl 接口,并在服务类中实现该接口。 - 在服务的 `onBind()` 方法中返回实现了 Aidl ...

    Android-AIDL Demo

    注意,`in`关键字表示参数传递到服务端,而`out`关键字表示服务端将结果传出给客户端。 在服务端,我们需要实现这个接口。在`RemoteService`类中,我们看到`onBind`方法返回了两个接口的实现,`IRemoteService.Stub...

    AIDL----Android进程间通信(IPC)代码

    String complexMethod(in String input, out int output); } ``` 这将生成两个Java类:`IAIDLTest.java`(服务端接口)和`IAIDLTestStub.java`(客户端代理)。服务端需要实现`IAIDLTest`接口,而客户端通过`...

    Android编写Aidl文件[文].pdf

    - 参数类型需要指定传输方向(`in`、`out`、`inout`),Java原始类型默认为`in`。 通过遵循这些步骤和注意事项,开发者可以利用AIDL实现Android应用间的高效跨进程通信,使得服务可以在不同的进程中被其他应用调用...

    Android AIDL Demo

    AIDL还支持接口回调,通过定义`in`、`out`、`inout`参数来实现。同时,AIDL不直接支持异常处理,但可以通过指定返回值为`Parcel`类型,然后在`Parcel`中封装异常信息,让客户端自行处理。 **优化与注意事项** 1. *...

    android AIDL服务

    void getQuote(String symbol, in out Stock stock); } ``` 在这个例子中,`IStockQuote`接口定义了一个`getQuote`方法,该方法接收一个股票代码(`String symbol`)和一个`Stock`对象。`in`关键字表示参数是传入...

    应用源码之aidl跨进程调用.zip

    void sendData(in MyParcelable data, out int result); ``` **使用步骤** 1. **创建AIDL文件**:在项目的src/main/aidl目录下创建AIDL文件,定义接口。 2. **编译AIDL**:Android Studio会自动编译AIDL文件,...

    Android AIDL中Map参数传递的问题详解

    解决这个问题的关键在于,Map应该被声明为非泛型类型,并且在参数前添加关键字`in`、`out`或`inout`来指定数据流动的方向。正确的做法如下: ```aidl interface IMyAidl { void test(in Map datas); } ``` 这里,...

    Android Parcelable与Serializable详解及区别

    相比之下,`Parcelable`是Android平台特有的一种高效序列化方式,专为Android系统内部数据传输设计,如在Activity之间传递数据或通过AIDL(Android Interface Definition Language)进行进程间通信。由于`Parcelable...

    Android AIDL——进程通信机制详解

    但Android AIDL不支持`out`和`inout`参数,所有参数默认按`in`处理。 当AIDL文件被编译后,Android Studio会自动生成对应的Java代码。生成的代码主要包括三个类: 1. **IBookManager**:接口类,继承自`android.os....

    android_AIDL:AIDL的理解和使用

    4. **方向关键字**:in表示参数由调用者传入,out表示返回结果,inout表示既作为输入又作为输出。 ### 使用步骤 1. **创建.aidl文件**:在项目的src/main/aidl目录下创建一个.aidl文件,定义接口。 2. **编译生成...

    Android 进程间通信AIDL使用详解

    4. 定向 Tag 用于标注方法的参数值,分为 in、out、inout 三种。 5. 明确导包。在 AIDL 文件中需要明确标明引用到的数据类型所在的包名,即使两个文件处在同个包名下。 在服务端编码中,我们可以使用 AIDL 来定义...

    weather-AIDL:AIDL界面和Android服务示例

    5. **处理数据传输**:由于AIDL支持基本数据类型和Parcelable接口的类,所以自定义的数据结构(如`WeatherData`)需要实现`Parcelable`接口,以便在进程间传输。 6. **错误处理**:跨进程通信可能会遇到异常,如...

Global site tag (gtag.js) - Google Analytics