文档章节

Android的Context Manager(服务管理器)源码剖析-android学习之旅(99)

fengsehng
 fengsehng
发布于 2016/11/09 09:18
字数 600
阅读 5
收藏 0

Context Manager介绍

Context Manager对应的进程是servicemanager进程,它先于Service Server和服务客户端运行,进入接收IPC数据的待机状态,处理来自Service Server的注册请求和服务客户端的查询请求。查看ini.rc脚本可以发现,Context Manager进程先于umediaserver和system_server进程运行。如下图所示:

这里写图片描述

关于服务进程更详细的介绍,见我之前的几篇文章

Android的启动过程分析(从进程和Framework的角度
Android系统服务详解
Android Binder IPC详解

每当service server注册服务时候,Context Manager都会把服务的名称和Binder节点编号注册到自身的目录中,该服务目录可以通过跟文件系统下面的/system/service程序查看。

service程序以IPC应答数据的形式接收Context Manager服务目录中的服务名称,并将收到的服务输入到画面中。具体操作是打开adb shell,输入service list,结果如下图:

这里写图片描述

Context Manager的运行

Context Manager的源码在/framework/base/cmds/servicemanager目录下的serveice_mamager.c文件中。它的main函数大致可以分为三个部分:binder_open(用来打开Binder Driver,并且创建IPC数据的接收buffer),binder_become_context_manager(注册特殊节点,既是0号binder节点),binder_loop(用来不断的接收IPC数据)

核心代码如下:

这里写图片描述

3部分的核心代码如下:

这里写图片描述

parse()函数展开 ,代码如下:

这里写图片描述

parse()又调用了svcmgr_handle()函数() ,展开如下:

这里写图片描述

1.服务客户端在检索服务时候,执行这段代码,服务客户端首先通过RPC数据传递服务名称,从do_find_service()函数自身的服务列表获取服务编号,而后bio_put_ref()函数生成binder_ object()结构体,该结构体将被包含到IPC数据的RPC数据中。而后调用binder_send_reply()函数,讲IPC应答数据传递到Binder Driver。

当service server注册服务时候使用这段代码。Context Manager调用do_add_service()函数将IPC数据的RPC数据包含的服务名称与Binder节点编号注册到自身的服务中目录中。而后调用binder_send_reply()函数,讲IPC应答数据传递到Binder Driver。

总结:Binder是由Service Server(android服务),Service Client(使用服务的客户)。Conetxt Manager(服务管理者),以及Binder Driver死大部分构成。

© 著作权归作者所有

共有 人打赏支持
fengsehng
粉丝 4
博文 284
码字总数 214494
作品 0
朝阳
程序员
Android 源码分析之旅1--系统架构与分析方法、工具

《Android 源码分析之旅》目录 apefwkall.png 《Android 源码分析之旅》的全部目录将作如下安排: 第1章节——本篇文章,将介绍一些基本的概念、方法、工具。 第2章节——着重介绍Binder IP...

猴亮屏
2017/10/19
0
0
Android 进阶学习笔记整理

一.android系统架构图及各层介绍 1. 应用层:应用是用java语言编写的运行在虚拟机上的程序,比如通讯录,日历,电话,短信,浏览器等。 2. 应用框架层:这一层是编写Google发布的核心应用时所...

FunCode
07/22
0
0
剖析ActivityManagerService

作为Android开发的你,对Activity的使用肯定是再熟悉不过了,在使用过程中,你是否浮现过一个疑问: 没错,该文将与你一起探索ActivityManagerService(以下简写为AMS),看它是如何管理Activit...

silencezwm
07/03
0
0
Android5.1.1源码 - 分析Android系统服务何时被添加到ServiceManager

Android5.1.1源码 - 分析Android系统服务何时被添加到ServiceManager @(Android研究)[ServiceManager PackageManagerService ActivityManagerService] ----------[TOC] 前言 本文公开首发于阿......

i不歪
2015/11/11
0
0
最强最全干货分享:Android开发书籍、教程、工具等

最全干货分享,本文收集整理了Android开发所需的书籍、教程、工具、资讯和周刊各种资源,它们能让你在Android开发之旅的各个阶段都受益。 入门 《Learning Android(中文版)》 本书为Andro...

拉偶有所依
2015/01/09
0
1

没有更多内容

加载失败,请刷新页面

加载更多

TypeScript基础入门之高级类型的可辨识联合(Discriminated Unions)

转发 TypeScript基础入门之高级类型的可辨识联合(Discriminated Unions) 高级类型 可辨识联合(Discriminated Unions) 你可以合并单例类型,联合类型,类型保护和类型别名来创建一个叫做 ...

durban
10分钟前
1
0
画图工具

目标是不要让我自己摆放,那样会打断我的思路。要自己会摆放,我写字就好。 纠结对齐的我在也不会因为一个像素的问题小心翼翼的移动鼠标了。因为它对不齐你也管不了。 Graphviz https://www...

郭大鹏
11分钟前
1
0
在Visual Studio中使用GitHub(使用篇)

上一篇中已经介绍了如何在windows下安装和配置Git,并且详细说明了如何和GitHub连接。 这里就详细的说明下如何在Visual Studio中使用GitHub。这里也是一个简单的Git教程。 注:非常非常简单的...

Jokeny
11分钟前
1
0
tomcat 在liunx系统中shutdown后进程仍然存在解决办法

这个在windows下没有碰到过,因为此前跑Tomcat都是以服务而不是命令脚本的形式跑的,而且已经换了一个项目,所以暂时不考察windows下是否存在该问题。 难道是Tomcat版本问题?或者用带内存泄...

乱舞
12分钟前
1
0
区块链10年了,还未落地,它失败了吗?

几乎每个人,甚至是对通证持怀疑态度的人,都对区块链的技术有积极的看法,因为它有可能改变世界。然而,区块链技术问世已经10年了,我们仍然没有真正的用上区块链技术。 有人说,比特币是建...

linux-tao
17分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部