AIDL中的in,out,inout用法篇

发布时间 2023-11-28 16:52:39作者: 疯子FK

Android两个进程间的内存相互独立不能互相访问,跨进程传输非默认类型对象需要先序列化,序列化的目的是将对象数据以能够在内存中流通的形式从

一个进程传递到另一个进程,两个进程对象的传递类似深度clone,client端就对象数据写入Parcel(writeToParcel)server端从Parcel(readFromParcel)读取对象数据并

重新创建一个同样的对象将读取的数据填充到此对象,但这两个对象并不是一样的,只是他们的数据完全一样。

 

两个进程中要传递的对象必须实现Parcelable接口,AIDL中序列化的对象传递还必须指定定向tag,tag表示数据的流通方向。

 

in:由client端流向server端,server端可以收到此对象的所有数据,收到之后会重新创建一个新的对象将数据填充进去,因为client端和server端是两个不同的对象,

所以server端对数据的修改不会影响到client端的对象

 

out: 有server端流向client端,client端将对象传递给server端后,server端相当于收到了一个空对象,没有client端此对象的任何数据,但是server端对此空对象的操作会影响到client端

 

inout:对象可以双向流动。即server端能收到client发过来的对象的数据,server端对此对象的操作也能影响到client对象