我在Android Developer about IBinder/Binder上阅读了文档。
它说
Binder系统还支持跨进程的递归。对于 例如,如果进程A执行事务以处理B和进程 B处理该事务时调用IBinder上的transact() 在A中实现,然后是A中当前正在等待的线程 对于原始交易完成将负责打电话 Binder.onTransact()对B调用的对象。这确保了 调用远程binder对象时的递归语义是相同的 就像调用本地对象一样。
我对此有两个问题
然后正在等待原文的A中的线程 要完成的事务将负责调用Binder.onTransact() B调用的对象
首先,除了原始程序之外,如何通知被阻止的线程做其他事情?
其次,在线程完成onTransact()
之后,它会再次阻止等待原始交易。
答案 0 :(得分:1)
首先,除了原始程序之外,如何通知被阻止的线程做其他事情?
Binder旨在抽象出IPC的过程,因此这个问题基本上简化为“返回之前被调用函数如何调用函数”。由于这显然是可能的,也是明智的,它也应该与Binder合作。
实施方面,它将通过解释从活页夹事务操作接收的数据来完成 - 如果这是“为我调用此方法”而不是“您的返回值是”的编码,那么就会发生这种情况。 / p>
其次,在线程完成onTransact()之后,它会再次阻塞以等待原始事务。
是的,因为从处理活页夹事务的代码中调用的方法最终会返回到那里(除非有例外,处理死亡,信号或类似事件)