文档章节

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

fengsehng
 fengsehng
发布于 2016/11/09 09:07
字数 600
阅读 3
收藏 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死大部分构成。

本文转载自:http://blog.csdn.net/lpjishu/article/details/50833890

共有 人打赏支持
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

没有更多内容

加载失败,请刷新页面

加载更多

Maven 项目中依赖的搜索顺序

ettings_mirror 的优先级高于 central settings_profile_repo 优先级高于 settings_mirror settings_profile_repo 优先级高于 pom_repositories settings_profile_repo 优先级高于 pom_prof......

xingyu4j
13分钟前
1
0
改变maven项目的名称

pom.xml <groupId>com.soft.xxx</groupId><artifactId>xxx</artifactId><packaging>war</packaging><version>0.0.1-SNAPSHOT</version><name>xxx Maven Webapp</name><build>......

1713716445
15分钟前
2
0
windows下按照RabbitMQ

rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统。它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,Rabbit MQ 是建立在Erlang OTP平...

zhaochaochao
15分钟前
2
0
10个PHP比特币开源项目

如果你是一个Phper,如果你希望学习区块链,那么本文列出的10个开源的Php比特币项目,将有助于你了解在自己的应用中如何加入对比特币的支持。 如果你希望快速掌握使用Php对接比特币钱包的方法...

笔阁
22分钟前
14
0
MyBatis级联探讨

数据模型 <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper name......

职业搬砖20年
26分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部