Android AIDL 小结

一、无论是否是跨进程调用,以及不论是否在主线程bindService,onServiceConnected/onServiceDisconnected 都是在主线程执行;

二、如果是跨进程调用

1.客户端调服务端中的方法,不管客户端是否在主线程调用,服务端在binder线程中执行;

2.服务端回调客户端方法:

1)在服务端直接调用(没有开启子线程),客户端回调方法在调用服务端方法对应线程(主线程也一样)执行;

2)在服务端的子线程调用,客户端回调方法在客户端的binder线程中执行;

3)在服务端的子线程调用,客户端回调方法里面再调用服务端方法,服务端方法在服务端对应的那个子线程里面调用;

三、如果不是跨进程,则服务端、客户端都是在调用方法线程中(子线程调用,则被调用端在相应的子线程中,可以简单的看作是普通类之间方法调用)

四、客户端跨进程调用时,如果调用的方法没有用oneway 修饰时,客户端会直接阻塞;如果调用oneway 方法,则不会阻塞;所以跨进程调用时,应尽量避免在主线程中调用服务端方法

五、跨进程调用时,使用RemoteCallbackList 保存客户端回调,使用普通List无法反注册(因为Binder会把客户端传过来的listener 重新生成一个新对象);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值