😀
To use this correctly, you must be doing so within the context of a top-level application component (a Service, Activity, or ContentProvider) that lets the system know your process should remain running.
Most developers will not implement this class directly, instead using the aidl tool to describe the desired interface, having it generate the appropriate Binder subclass. 
如官方说明,使用Binder机制,主要是以AIDL的方式使用,关于AIDL的使用流程,可以看
AIDL 简单使用

Binder是什么

  • Binder是Android的一个IPC机制。
  • Binder框架允许客户端和服务端在不同的进程中安全地传递数据。

Binder为什么性能高

直接数据传输

  • Socket、管道传统IPC方式:
    • 数据需要在用户空间和内核空间之间多次拷贝。
    • 数据首先从发送方的用户空间复制到内核空间,然后再从内核空间复制到接收方的用户空间
  • Binder:
    • 采用内存映射方式,减少了一次接收方从内核空间拷贝数据到其用户空间的拷贝操作

序列化

使用Parcel对象,作为数据传输的载体,在Android平台下,传输效率更高

Binder数据传输过程

以应用A想要发送一些数据给应用B为例:
  • 内存映射:应用A使用内存映射,将一块内核内存映射到用户空间。
  • 数据写入:应用A将数据写入到映射的内存里,此时由于内存映射的存在,相当于把数据写进行了内核空间。
  • 传递引用:应用A通过Binder驱动传递一个指向该内存区域的引用给应用B。这个过程中数据本身并没有被复制,而是通过传递指针或句柄的方式进行。
  • 数据访问:应用B通过接收到的引用直接访问映射的内核内存中的数据。这个访问过程不涉及数据的拷贝。
notion image

为什么Binder要使用内存映射技术

  • 减少数据拷贝次数:通过内存映射,数据只需拷贝一次即可从用户空间传递到内核空间,而不是在用户和内核之间多次来回拷贝。
  • 直接访问内核资源:映射内核内存到用户空间后,用户程序可以直接对这些内存进行操作,这减少了系统调用的数量和上下文切换的开销,从而提高通信效率。
  • 提高并发性和响应速度:内存映射支持多个进程或线程同时访问相同的内核内存区域,这有助于提升多任务处理的并发性和响应速度。

📎 参考文章

 
Compose处理副作用的函数Android序列化