Android AIDL中方法调用和回调线程问题探讨

2022-11-10  本文已影响0人  guoheng1996

在Android中咱们暂且把线程分为三种,主线程,子线程,binder线程。
binder线程概念较复杂,我们这里不讨论。

怎样产生binder线程?
通过AIDL调用,在一定场景下代码会运行在binder线程中,如下所示:

先介绍一个概念oneway关键字:
使用oneway时,远程调用不会阻塞;它只是发送事务数据并立即返回。接口的实现最终接收此调用时,是以正常远程调用形式将其作为来自 Binder 线程池的常规调用进行接收。

image.png

客户端调用服务端方法时,客户端发起调用时线程和服务端响应线程对应关系如下:

方法声明oneway 时:

下图中Binder:7649_3,main, Thread-2即客户端调用方法时线程。


方法有oneway.png
客户端调用方法时线程 服务端响应客户端方法时线程
主线程 binder线程
子线程 binder线程
binder线程 binder线程
方法声明没有oneway 时:
方法没有oneway.png
客户端调用方法时线程 服务端响应客户端方法时线程
主线程 binder线程
子线程 binder线程
binder线程 主线程
服务端回调给客户端时线程 客户端收到回调时线程
主线程 binder线程
子线程 binder线程
binder线程 主线程
回调方法带oneway.png
服务端回调给客户端时线程 客户端收到回调时线程
主线程 binder线程
子线程 binder线程
binder线程 binder线程
上一篇 下一篇

猜你喜欢

热点阅读