简析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机制

如下图:



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接口的能力。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值