Android IPC Binder - onTransact()等待前一个返回

时间:2018-01-04 10:58:54

标签: android ipc android-binder

我有一个使用IPC的应用程序。

我的主要应用是从远程服务接收单向回调。 收到这些回调后,我做了一些及时的工作(1-20秒)。 如果我理解正确 - 这项工作是在一个活页夹上完成的,那就是调用 onTransact()方法。

received on: Thread[Binder:12019_2,5,main]

有时回调由服务发送得比上一次回调的工作更快。 (远程服务也由我控制,所以我知道确切的时间)。

问题是我没有在主应用程序中立即收到不同活页夹线程的回调 - 回调是等待以前的onTransact()返回,然后才返回应用程序在与前一个线程相同的线程上接收回调。

再次:

received on: Thread[Binder:12019_2,5,main]

我认为我对Binder的理解是不够的。

来自文档:

  

系统在每个进程中维护一个事务线程池   它运行。这些线程用于调度所有进入的IPC   来自其他进程。例如,当IPC由过程A制成时   处理B,A中的调用线程在发送时在transact()中阻塞   要处理的事务B. B中的下一个可用池线程   收到传入的事务,调用Binder.onTransact()   目标对象,并使用结果包裹回复。

在我的情况下,进程A(远程服务)使用FLAG_ONEWAY调用transact(),进程B(我的应用程序)应该在'下一个可用的池线程上接收传入的事务'。 / p>

那么为什么它和当前正在运行的那个一样接收呢?

我可以制作onTransact() 非阻止吗?

0 个答案:

没有答案