ServiceManager与SystemService 作用与关联

ServiceManager与SystemService 是Android 系统中与服务相关的两个进程

我们可以看到systemserver 进程是由zygote 进行孵化出来的,而servicemanager 进行的父进程是init 进程

 

systemserver 的实现 是在framework 层

看下 源码:

run()继续跟踪

可以看到Android 系统中所有的服务都是在run()中进行启动。

2 启动后的服务该怎么管理与使用呢?

这里我们就要引申出servicemanager 了。

在framework 内 我们看下ServiceManagerNative 类

上面我们说了 ServiceManager 与 SystemService 分别是两个独立的进程,他们两之间要进行通信,必须使用进程间通信,这里的机制是通过binder 。

 

servicemanager 是管理binder 十分重要的类。PMS ,AMS 等通过上层ServiceManagerNative 类将 相对应的信息注册到 native 层的 servicemanager中,native 保留一个int类型的handle地址,

地址指向的地址就是相关服务。serviceManager 会给相关服务分配一个4k的物理内存。

所以:服务的启动跟所在的进程都是systemserver 进程中,但是注册跟获取服务都是需要通过servicemanager。

我们清楚了servicemanager 是一个单独的进程,那就一定有main()函数 我们跟着源码进行挖,看看我们上面说的是不是真的跟binder 有关联

这边调用了一个binder_open方法,我们在同级目录下的binder.c文件中查看有么有该方法

我们看到 这个binder_open 方法传入的参数 是一个路径,从名字可以看到 dev/binder,这里传入的就是驱动层的binder文件的路径。

有兴趣的可以继续向下看驱动层binder.c 的源码,我这边附给大家,这块内容还是很多了,涉及到整个binder进程间通信,这里就不过多介绍了。

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值