简析ServiceManager,ActivityManger,PackageManager等

1.ServiceManager,顾名思义,管理系统中的service,有:inputMethodService,ActivityManagerService等。在serviceManager中有两个重要的方法,add_service, check_service。

系统的service通过add_service把自己的信息注册到serviceManager中,而当需要使用系统的service的时候,通过check_service检查该service是否存在。

简单的举个例子来形容serviceManager和系统service之间的关系:例如公司的总机,还有各个部门的分机,用户联系的时候,首先是联系总机,也就是我们的serviceManager,当需要具体部门的时候,通过总机来进行联系下面的分机。总机是对外公开的,系统中的任何进程都可以使用BinderInternal.getContextObject()来获取总机的Binder对象。

这样做的好处,系统中只需要暴露一个全局的binder引用,那就是serviceManager,其他系统服务就可以隐藏起来,有助于系统服务的扩展,以及安全性。


其他的系统服务在启动的时候,首先把自己的Binder对象传递给serviceManager,也就是add_service,注册过程。


2.ActivityManager的功能是与系统中所有运行的activity交互提供了接口,主要的接口围绕着运行中的进程信息,任务信息,服务信息等。

3.packageManager,主要职责管理应用程序包。通过他,我们可以获取应用程序信息。


Binder机制

如下图:

简析ServiceManager,ActivityManger,PackageManager等_第1张图片


Binder其实就是进程间的一个通信机制。而Linux内核继承和兼容了Unix IPC的通信机制。在android系统的binder机制中,由一系统组件组成,分别是Client,Server,Service

 Manager和Binder驱动程序。其中,Client,server和service Manager运行在用户空间,Binder驱动程序运行在内核空间。

Binder就是把这四个组件粘合在一起的粘合剂。核心组件就是Binder。Service Manager提供辅助管理的功能。Client和Server就是在他俩提供的基础上,进行通信的。

1.Binder驱动程序和Service Manager在android平台中已经实现,开发者只需要在用户空间实现自己的Client和Server即可。

2.Binder驱动程序提供设备文件/dev/binder与用户空间进行交互,Client、server、service manager通过open和ioctl文件操作函数与binder进行通信。

3.Service Manager是一个守护进程,用来管理server,并且向Client提供查询server接口的能力。


你可能感兴趣的:(小结)