我有一个使用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()
非阻止吗?