Android Framework:深入探索 AIDL 数据流动,android开发基础课程

本文深入探讨了Android Framework中的AIDL数据流动,通过实例展示了如何进行客户端和服务端的交互。实验表明,`in`参数仅能从客户端向服务端传递数据,`out`参数则允许服务端向客户端回传数据,而`inout`参数可在两者间双向流动。然而,这种数据流动仅限于被修饰方法的作用域内,超出范围则失效。通过对AIDL生成的Java文件分析,进一步证实了这一结论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

}

@Override

public void changePerson() throws RemoteException {

mPerson.setName(“CCCCCCC”);

Log.d(TAG, "changePerson: " + mPerson);

}

@Override

public void personChanged() throws RemoteException {

Log.d(TAG, "personChanged: " + mPerson);

}

@Override

public Person getPerson() throws RemoteException {

return mPerson;

}

}

客户端:


findViewById(R.id.in).setOnClickListener(v -> {

try {

Person in = new Person(“In”, “1”);

Log.d(TAG, "in1: " + in);

mService.setPersonIn(in);

Log.d(TAG, "in2: " + in);

} catch (RemoteException e) {

e.printStackTrace();

}

});

findViewById(R.id.out).setOnClickListener(v -> {

try {

Person out = new Person(“Out”, “1”);

Log.d(TAG, "out1: " + out);

mService.setPersonOut(out);

Log.d(TAG, "out2: " +

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

out);

} catch (RemoteException e) {

e.printStackTrace();

}

});

findViewById(R.id.inout).setOnClickListener(v -> {

try {

Person inOut = new Person(“InOut”, “1”);

Log.d(TAG, "inOut1: " + inOut);

mService.setPersonInOut(inOut);

Log.d(TAG, "inOut2: " + inOut);

} catch (RemoteException e) {

e.printStackTrace();

}

});

从代码可以知道,我们分别定义了使用 inoutinout 修饰的三个方法,然后在客户端分别调用了这三个方法,服务端则在收到对象后马上修改对象的属性。我们看一下运行起来的 Log,观察下数据流向

Log 验证

============

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值