2016-06-13 82 views
2

我阅读Android Developer about IBinder/Binder上的文档。如何了解Android Binder递归

它说

的粘结剂系统还支持跨进程递归。对于 示例如果进程A执行事务处理B,并且在处理该事务时处理 B调用了在A中实现了 的IBinder上的transact(),则当前正在等待 的A中的线程将原始事务处理为完成后将调用 B正在调用的对象上的Binder.onTransact()。这确保在调用远程绑定器对象时的递归语义与调用本地对象时的递归语义是相同的。 。

我对这个

两个问题,然后在一个线程当前等待原 交易完成将于 对象调用Binder.onTransact()的护理被称为B

首先,如何通知被阻塞的线程去做除原始程序以外的其他内容?

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

回答

1

首先,如何通知阻塞的线程去做除原始程序以外的其他东西?

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

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

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

是的,因为叫了一个处理粘结剂交易最终会回到那里的代码的方法(除非有异常,死亡的过程,信号或类似)

+0

非常感谢。现在我更了解活页夹。 –