Binder 之 oneway 机制

作者: 青叶小小 | 来源:发表于2021-02-02 00:20 被阅读0次

    Binder 是 Android 中的 IPC(进程间通信)的最要一环,它的作用就是:

    • 异步调用
      应用向 binder 驱动发送数据后不需要挂起线程等待 binder 驱动的回复,而是直接结束。
    • 串行化处理
      对于一个服务端的 AIDL 接口而言,所有的 oneway 方法不会同时执行,binder 驱动会将他们串行化处理,排队一个一个调用。

    像一些系统服务调用应用进程的时候就会使用 oneway,比如 AMS 调用应用进程启动 Activity,这样就算应用进程中做了耗时的任务,也不会阻塞系统服务的运行。

    本篇不展开它是如何通信的,只聊聊它的机制,分两种:

    • oneway:调用方非阻塞(non-block)
    • 非 oneway:调用方阻塞(休眠)

    首先是非 oneway 的情况:

    non-one-way.png

    这里的挂起相当于 Thread 的 sleep,是真正的"休眠",底层调用的是 waitEventInterruptible(), Linux 系统函数。

    oneway 的情况,客户端就不需要挂起线程等待:

    one-way.png

    写在最后,涉及到的 binder 命令也有规律:

    • 由外部发送给 binder 驱动的都是 BC_ 开头;
    • 由 binder 驱动发往外部的都是 BR_开头;

    相关文章

      网友评论

        本文标题:Binder 之 oneway 机制

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