Context Manager概要
- context manager 对应的进程为servicemanager,它先于Service Server与服务客户端运行,首先进入接收IPC数据的待机状态,处理来自Service Server或服务客户端的请求。
- 每当Service Server注册服务时,Context Manager都会把服务的名称与Binder节点编号注册到自身的服务目录中,该服务目录通过根文件系统下的/system/service程序即可查看。
- service程序以IPC应答数据的形式接收Context Manager服务目录中的服务名称,并将接收到的服务名称输出到画面中。
Context Manager 的运行
context manager 与其他android服务不一样,它采用C语言编写,以便使其与Binder Driver紧密衔接。Context Manager的源码在/frameworks/native/cmds/servicemanager/的service_manager.c文件中。
Context Manager 的main()函数大致可以分为以下三部分,分别为binder_open()函数(用来打开Binder Driver并创建IPC数据接收Buffer)、binder_become_context_manager()函数(注册特殊节点,即0号Binder节点),以及binder_loop()函数(用来不断接收IPC数据)。
int main()
{
|
|
}
Context Manager 的主要任务包括服务注册与服务检索两大任务,具体由svcmgr_handler()函数根据RPC代码执行。
int svcmgr_handler(struct binder_state bs,struct binder_transaction_data txn,struct binder_io msg,struct binder_io reply)
{
}
总结
Context Manager是Binder Driver的重要组成部分之一。android平台启动的时候,在init进程中会初始化Context Manager,其是android本地服务和Java服务的管理者,提供服务注册、服务检索、服务响应等作用。