Android 中aidl调用执行线程和同步异步问题

来源:互联网 发布:矩阵论清华大学出版社 编辑:程序博客网 时间:2024/05/24 02:38

1,bind服务回调执行所在线程

客户端调用bindService(intent, mConn, Context.BIND_AUTO_CREATE);

ServiceConnection回调中获取服务器端的接口(实现了Binder的类)onServiceConnected回调实在主线程中执行

2,调用服务端binder类(只实现binder和对应接口的stub类)

1》调用没有用 oneway修饰的方法,客户端调用会直接阻塞,服务端方法在binder线程池中执行

2》调用使用oneway调用的方法(不能有返回值),客户端不会阻塞,服务端方法在binder线程池中执行

3,有回调的binder方法(实现一个对应的服务器端binder回调)

1》回调方法直接在服务器端方法中调用:

客户端阻塞,阻塞时间为两个之和,客服端回调在调用方法对应线程(如在主线程也是一样,但是show toast 出不来),服务端线程任然在binder线程中执行

2》回调方法在服务器端方法中开线程调用

客户端阻塞,阻塞时间为服务器端时间,客服端回调在客服端binder线程中执行,服务端线程任然在binder线程中执行

4,客户端回调中调用服务器端方法

在3基础上,再在回调中调用服务器端方法是在子线程中执行不是在binder线程

总结:调用binder中非oneway方法是阻塞的并且方法是在子线程中执行,调用oneway方法不阻塞,任然在子线程中执行

原创粉丝点击