最近在学习Android内核设计思想,看书的过程中将一些小知识点积累了一下。
需要解决的问题
因为发送请求的Binder client可能是应用程序,所以必须提供Java层的==接口==(需要找出这个接口是什么)
每个调用binder服务的程序,不需要亲自去执行如下步骤,所以需要封装如下功能
打开binder设备
执行mmap
通过binder驱动向ServiceManager发送请求
返回结果
如果每次调用都必须打开servicemanager服务,那么将会消耗很多资源,所以每个进程只能打开一次Binder设备,且只做一次内存映射,所有需要使用binder驱动的线程共享这一资源
相关类的解析
序号
相关内容
作用
1
ProcessState
专门管理每个应用进程当中对应的Binder操作
2
IPCThreadState
与Bnder驱动进行实际命令通信
3
ServiceManagerProxy
接口,用来封装ServiceManeger提供的服务
4
ServiceManager.java
封装了3的类
采用1和2两个类,已经可以实现与Binder驱动进行通信
为了实现这个接口,实现对服务的获取,有以下两步要做:
与Binder建立联系
因为已经有了1,2两个类,所以与Binder驱动的通信实际上是通过他们来实现,因此称他们为BpBinder<