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