美文网首页
Android AIDL中方法调用和回调线程问题探讨

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

作者: guoheng1996 | 来源:发表于2022-11-10 18:14 被阅读0次

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

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

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

    image.png
    • 1:客户端在主线程/子线程/binder线程调用服务端方法,此时服务的方法运行在什么线程中呢?

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

    方法声明oneway 时:

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


    方法有oneway.png
    客户端调用方法时线程 服务端响应客户端方法时线程
    主线程 binder线程
    子线程 binder线程
    binder线程 binder线程
    方法声明没有oneway 时:
    方法没有oneway.png
    客户端调用方法时线程 服务端响应客户端方法时线程
    主线程 binder线程
    子线程 binder线程
    binder线程 主线程
    • 2:服务端在子线程/主线程中调用客户端回调接口,此时客户端回调接口运行在binder线程中。
      下图中Binder:6527_1,Thread-2, main 是服务端调用回调时,线程名称。
      6509即为客户端进程号。


      回调方法不带oneway.png
    服务端回调给客户端时线程 客户端收到回调时线程
    主线程 binder线程
    子线程 binder线程
    binder线程 主线程
    回调方法带oneway.png
    服务端回调给客户端时线程 客户端收到回调时线程
    主线程 binder线程
    子线程 binder线程
    binder线程 binder线程

    相关文章

      网友评论

          本文标题:Android AIDL中方法调用和回调线程问题探讨

          本文链接:https://www.haomeiwen.com/subject/iviltrtx.html