Android跨进程aidl文件关键字研究学习
一.in,out,inout,oneway
oneway修饰的方法是立即返回,不会管服务端到底有没有执行,异步执行,触发调用就完事了,不能有返回值。
1.同步异步调用oneway关键字
模拟耗时操作,测试同步异步
测试调用方法的耗时
观察日志发现,request的执行时间是0毫秒,说明oneway修饰的方法没有被阻塞。但是getID的执行时间是4006毫秒。
2.数据流向
in,客户端流向服务端
out,服务端流向客户端
inout,双向通信。
声明一个可序列化对象,
3.in关键字
来看看服务端对这几个接口的实现
验证一下testIn方法
运行观察现象,说明in关键字生效,我们调用完下面这个方法,name并没有发生改变还是我们原来设置的qfhqfh,而不是 info.name = “textIn”;
String textIn(in User info);
@Override
public String textIn(User info) throws RemoteException {
if (info != null) {
info.name = "textIn";
return info.name;
}
return null;
}
我们设置的name并没有改变说明服务端的对我们对象的name修改不起作用,
4.out关键字
服务端修改了对象的属性
客户端调用
out关键字是不能感知客户端传递过来的对象数据的,只能在服务端修改数据。客户端传递的数据服务端是读取不到的。
下面这行日志是我们客户端打印的数据,已经被服务端修改了的数据。,
这个是服务端打印的客户端传递过来的数据是null说明out关键字不会接收客户端传递的数据过来。
5.inout关键字
双向的数据流动,客户端和服务端数据的双向感知。
客户端调用
结果客户端传递的对象数据确实被服务端修改了,
服务端也能接收客户端传递过来的对象数据