
BinderBinder使用ClientServer(c/s架构)通信方式。Binder框架定义了四个角色Server,Client,ServiceManager以及Binder驱动。其中Server,Client,ServiceManager运行于用户空间驱动运行于内核空间。ServiceManager负责把Binder Server注册到一个容器中。通过代理对象通信Binder代理对象 Binder引用对象 Binder实体对象 Binder本地对象AIDLAndroid Interface Definition Language Android接口定义语言Android提供的一种Binder实现。线程池主线程是由 Zygote母体生成的线程池首次创建第一个Binder线程A然后监听BR_SPAWN_LOOPER事件收到后创建第二个Binder线程B线程B继续监听BR_SPAWN_LOOPER事件收到后创建第三个Binder线程C。总共创建3个Bindr线程这是Binder协议决定。根据系统处理器数目以及应用程序的负载强度线程池的线程数目可以动态调整这是Binder优化需要考虑的。Service Manager是整个Binder通信机制的大管家是Android进程间通信机制Binder的守护进程管理Binder机制Client端和Server端通信时都需要先获取Service Manager接口才能开始通信服务。所有系统服务都需要在ServiceManager类中进行注册服务注册、获取和访问过程通信BpBinder发送端根据handler在当前binder_proc中找到相应的binder_ref由binder_ref再找到目标binder_node实体由目标binder_node再找到目标进程binder_proc销毁在应用进程创建的过程中有一个attachApplicationLocked方法的过程中便会创建死亡通知。当binder服务端挂了之后便会通过binder的DeathRecipient来通知AMS进行相应的清理收尾工作。当该进程会杀则会回调到binderDied()方法。Crash进程中拥有一个Binder服务端ApplicationThread而应用进程在创建过程调用attachApplicationLocked()从而attach到system_server进程在system_server进程内有一个ApplicationThreadProxy这是相对应的Binder客户端当Binder服务端ApplicationThread所在进程(即Crash进程)挂掉后则Binder客户端能收到相应的死亡通知从而进入binderDied流程。进程异常退出的时候内核保证会释放未正常关闭的它打开的/dev/binder文件即调用与/dev/binder文件所关联的release回调函数进而执行清理工作BBinder死亡通知机制Client进程从Binder驱动获得一个BpBinderClient进程向Binder驱动注册一个死亡通知该死亡通知与上述BpBinder所引用的BBinder相关联Binder驱动监控到BBinder所在进程异常退出的时候检查该BBinder是否注册有死亡通知Binder驱动向注册的死亡通知所关联的BpBinder所运行在的Client进程发送通知Client进程执行相应的清理工作