【问题标题】:How to understand Android Binder recursion如何理解 Android Binder 递归
【发布时间】:2016-06-13 07:39:46
【问题描述】:

我阅读了Android Developer about IBinder/Binder 上的文档。

上面写着

Binder 系统还支持跨进程递归。为了 例如,如果进程 A 向进程 B 执行事务,并且进程 B 在处理该事务时调用 IBinder 上的 transact() 在A中实现,那么A中当前正在等待的线程 完成原始交易将负责调用 Binder.onTransact() 在 B 调用的对象上。这确保了 调用远程绑定对象时的递归语义相同 就像调用本地对象时一样。

我对此有两个问题

然后线程 A 中当前正在等待原 要完成的事务将负责调用 Binder.onTransact() B调用的对象

首先,如何通知被阻塞的线程去做除了原始程序之外的其他事情?

其次,线程完成onTransact()后,是否会再次阻塞等待原始事务。

【问题讨论】:

    标签: android android-binder


    【解决方案1】:

    首先,如何通知被阻塞的线程去做除了原始程序之外的其他事情?

    Binder 是为了抽象出 IPC 的过程,因此这个问题本质上简化为“被调用函数如何在返回之前调用函数”。既然这显然是可能的,而且是明智的,它也应该与 Binder 一起使用。

    在实施方面,它将通过解释从绑定事务操作接收到的数据来完成 - 如果这是“为我调用此方法”而不是“您的返回值是”的编码,那么这就是将会发生的事情。

    第二,线程执行完onTransact()后,是否会再次阻塞等待原来的事务。

    是的,因为从处理 binder 事务的代码中调用的方法最终会返回那里(除非出现异常、进程死亡、信号或类似情况)

    【讨论】:

      猜你喜欢
      • 2018-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-28
      • 2014-06-16
      • 1970-01-01
      • 2013-10-13
      • 2014-06-26
      相关资源
      最近更新 更多