Android开发之serviceManager分析

Android 开发之serviceManager分析

        在Android系统中用到最多的通信机制就是Binder,Binder主要由Client、Server、ServiceManager和Binder驱动程序组成。其中Client、Service和ServiceManager运行在用户空间,而Binder驱动程序运行在内核空间。核心组件就是Binder驱动程序了,而ServiceManager提供辅助管理的功能,无论是Client还是Service进行通信前首先要和ServiceManager取得联系。而ServiceManager是一个守护进程,负责管理Server并向Client提供查询Server的功能。

 

在init.rc中servicemanager是作为服务启动的,而且是在zygote启动之前
service servicemanager /system/bin/servicemanager
	class core
	user system
	group system
	critical
	onrestart restart zygote
	onrestart restart media
	onrestart restart surfaceflinger
	onrestart restart drm


源码位置:frameworks/base/cmds/servicemanager/service_manager.c

int main(int argc, char** argv)
{
	struct binder_state *bs;
	void* svcmgr = BINDER_SERVICE_MANAGER;
	
	bs = binder_open(128*1024);
	
	binder_become_context_manager(bs);
	
	svcmgr_handle = svcmgr;
	
	binder_loop(bs, svcmgr_handler);
	
	return 0;
}


 这里main函数主要有三个功能:
1)打开Binder设备文件
 首先我们来看看这个struct binder_state结构体
 struct binder_state
 {
         int fd;   // 文件描述符,打开/dev/binder设备
         void* mapped;  // 把设备文件/dev/binder映射到进程空间的起始地址
         unsigned mapsize; // 映射内存空间的大小
 };
 
 宏:#define BINDER_SERVICE_MANAGER ((void*)0)
 表示ServiceManager对应的句柄为0,表面自己是服务器管理者。其他的Server进程句柄值都是大于0的。
</

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值