如何理解Android Binder递归

时间:2016-06-13 07:39:46

标签: android android-binder

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

它说

  

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

我对此有两个问题

  

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

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

其次,在线程完成onTransact()之后,它会再次阻止等待原始交易。

1 个答案:

答案 0 :(得分:1)

  

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

Binder旨在抽象出IPC的过程,因此这个问题基本上简化为“返回之前被调用函数如何调用函数”。由于这显然是可能的,也是明智的,它也应该与Binder合作。

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

  

其次,在线程完成onTransact()之后,它会再次阻塞以等待原始事务。

是的,因为从处理活页夹事务的代码中调用的方法最终会返回到那里(除非有例外,处理死亡,信号或类似事件)