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

问题描述 投票:0回答:0

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

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

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

有时服务发送回调的速度比前一个回调的工作完成更快。 (远程服务也由我控制,所以我知道确切的时间)。

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

再说一遍:

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

我认为我对Binder的东西理解不够。

来自文档:

系统在每个进程中维护一个事务线程池 它在其中运行。这些线程用于分派所有进入的 IPC 来自其他进程。例如,当 IPC 由进程 A 生成时 为了处理 B,A 中的调用线程在发送时阻塞 transact() 处理 B 的事务。B 中的下一个可用池线程 接收传入交易,调用 Binder.onTransact() 目标对象,并回复结果 Parcel.

在我的例子中,进程 A(远程服务)正在使用

FLAG_ONEWAY
调用 transact() 并且进程 B(我的应用程序)应该在“下一个可用池线程”上接收传入事务。

那么为什么它在与当前运行的相同的接收它?

我可以让

onTransact()
非阻塞吗?

android ipc android-binder
© www.soinside.com 2019 - 2024. All rights reserved.