我出于我的目的使用 Debug.startMethodTracing,并且在我可以看到的输出文件中(我不使用 IPC):
8 Binder Thread #2
7 Binder Thread #1
它是为了什么?
我出于我的目的使用 Debug.startMethodTracing,并且在我可以看到的输出文件中(我不使用 IPC):
8 Binder Thread #2
7 Binder Thread #1
它是为了什么?
Binder 线程代表您的服务的一个单独线程。Binder 是一种提供进程间通信的机制。
让我们考虑一个例子。假设您有服务流程 B(见图)。并且您有几个应用程序与此服务 B 通信(例如,此应用程序之一是进程 A)。因此,一项服务 B 应该同时向不同的应用程序提供不同的结果。因此,您需要为不同的应用程序运行多个服务 B 副本。Android 在进程 B 的不同线程中运行这些副本,这些线程称为“Binder Thread #N”。
我在这里拍了这张照片,你也可以在这里阅读 Binder 是什么。
“Binder 是一种提供进程间通信的机制。”
Binder 不一定只是一种 IPC 机制。
所有跨组件流量都是从 Binder 中抽象出来的,例如本地意图是 binder 抽象。
Binder Thread 用于 Android Service Binding 与进程间通信。大多数时候,您会在使用 Android 接口定义语言 (AIDL) 定义的接口的服务调用中遇到这个概念。
在 AIDL 的情况下,服务调用由由应用程序创建的默认线程池维护的线程执行。这些线程称为Binder Threads。这使服务能够同时处理多个调用。
通常,通过“扩展 Binder 类”和“使用 Messenger ”定义的接口的服务调用在一个线程中顺序执行。
可以在此处找到有关“服务绑定和线程”的详细讨论。
简而言之:
从本地进程进行的调用在进行调用的同一线程中执行。
来自远程进程的调用是从平台在您自己的进程内部维护的线程池中分派的。
您必须为来自未知线程的传入呼叫做好准备,同时发生多个呼叫。换句话说,AIDL 接口的实现必须是完全线程安全的。