Android:什么是Binder线程?

时间:2013-03-05 10:58:22

标签: android

我将Debug.startMethodTracing用于我的目的,在输出文件中我可以看到(我不使用IPC):

8   Binder Thread #2
7   Binder Thread #1

它是什么?

3 个答案:

答案 0 :(得分:41)

Binder线程代表您服务的单独线程。 Binder是一种提供进程间通信的机制。

让我们考虑一个例子。想象一下,您有服务流程B(见图)。并且您有几个与此服务B通信的应用程序(例如,此应用程序之一是进程A)。因此,一个服务B应该同时向不同的应用提供不同的结果。因此,您需要为不同的应用程序运行Service B的多个副本。 Android在进程B的不同线程中运行这些副本,这些线程称为“Binder Thread #N”。

Binder communication

我拍了照片here,你也可以在那里阅读Binder的内容。

答案 1 :(得分:2)

" Binder是一种提供进程间通信的机制。"

Binder不一定只是一种IPC机制。

所有跨组件流量都是从Binder中抽象出来的,例如本地意图是绑定抽象。

答案 2 :(得分:1)

活页夹线程在具有进程间通信的Android服务绑定中使用。大多数情况下,您会在带有Android接口定义语言(AIDL)定义的接口的服务调用中遇到此概念。

在AIDL情况下,服务调用由与您的应用程序一起创建的默认线程池维护的线程执行。 这些线程称为绑定程序线程。这使服务能够处理同时发生的多个调用。

通常,具有“ Extending the Binder class”和“ Using a Messenger”定义的接口的Service调用在一个线程中顺序执行。

可以在here中找到有关“服务绑定和线程”的详细讨论。

简而言之:

从本地进程发出的调用在进行调用的同一线程中执行。

远程进程的调用是从平台维护的线程池中分派的。

您必须为来自未知线程的呼叫做好准备,同时发生多个呼叫。换句话说,AIDL接口的实现必须完全是线程安全的