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