SystemServer服务和ServiceManager服务分析

1 SystemServer服务分析

SystemServer是zygote启动的第一个Android服务进程,主要工作如下:
(1)创建系统所有核心服务
(2)将服务添加到ServiceManager中
(3)将服务初始化

1.1 SystemServer启动的服务

(1)power
PowerManagerService:电源管理
BatteryService:电池服务
(2)ActivityManagerService
Activity管理服务
(3)PackageManagerService
程序包管理服务,与底层installd建立通信
(4)WindowManagerService
窗口管理服务,与surfaceflinger服务交互
(5)TelephonyRegistry
电话服务
(6)ContentService
进程间数据交换
(7)Sensor
LightsService:光感
VibratorService:振动
(8)Network
NetworkManagementService:手机网络管理服务
NetworkStatsService:手机网络状态服务
WifiP2pService:p2p服务
WifiService:wifi服务
ConnectivityService:网络连接状态服务
(9)BluetoothService
蓝牙服务

1.2 SystemServer启动流程

(1)SystemServer.main()
(2)dalvik.set()
(3)System.loadlibrary("android_servers");
(4)nativeInit()
(5)initAndLoop()
启动系统各个服务,将服务添加到ServiceManager中。

2 ServiceManager服务分析

2.1 ServiceManager服务概述

(1)服务进程,是android系统的核心服务之一
(2)系统服务管理:管理系统和应用向系统添加的服务
(3)查询获取服务:响应client请求并返回相应的服务
Android应用如果想要获取某个系统服务,这个系统服务需要提前添加到ServiceManager中。如果该服务连续几次异常退出,系统会重启。如果该服务重启,系统会重启zygote,surfaceflinger,media等服务。

2.2 ServiceManager是何时创建的?

ServiceManager是由init进程通过解析init.rc文件而创建的,其所对应的可执行程序/system/bin/servicemanager,所对应的源文件是service_manager.c。

service servicemanager /system/bin/servicemanager
    class core
    user system
    group system
    critical
    onrestart restart healthd
    onrestart restart zygote
    onrestart restart media
    onrestart restart surfaceflinger
    onrestart restart drm

2.3 ServiceManager启动过程

(1)打开binder
ServiceManager基于Binder机制实现
binder_open()
open("/dev/binder")
mmap()
(2)binder_become_context_manager()
(3)循环接收binder消息
接收的binder消息类型:添加服务,查询服务和获取服务
通过binder_loop()来接收其他进程发送过来的binder消息
(4)处理binder消息
通过svcmgr_handler()处理其他进程发送过来的binder消息

2.4 ServiceManager管理服务

图1 ServiceManager管理服务
(1)系统或Android应用进程发送添加系统服务的请求,通过binder进程间通信到ServiceManager进程处理,然后检查发起请求的进程的权限,再检查该服务是否已经存在,如果存在直接返回;如果不存在,将该服务添加到Service List里。
(2)获取该服务时也是通过binder进程间通信到ServiceManager进程处理,查询Service List找出该Service,然后返回。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章 阅读前的准备工作 1.1 系统架构 1.1.1 Android系统架构 1.1.2 本书的架构 1.2 搭建开发环境 1.2.1 下载源码 1.2.2 编译源码 1.3 工具介绍 1.3.1 Source Insight介绍 1.3.3 Busybox的使用 1.4 本章小结 第2章 深入理解JNI 2.1 JNI概述 2.2 学习JNI的实例:MediaScanner 2.3 Java层的MediaScanner分析 2.3.1 加载JNI库 2.3.2 Java的native函数和总结 2.4 JNI层MediaScanner的分析 2.4.1 注册JNI函数 2.4.2 数据类型转换 2.4.3 JNIEnv介绍 2.4.4 通过JNIEnv操作jobject 2.4.5 jstring介绍 2.4.6 JNI类型签名介绍 2.4.7 垃圾回收 2.4.8 JNI中的异常处理 2.5 本章小结 第3章 深入理解init 3.1 概述 3.2 init分析 3.2.1 解析配置文件 3.2.2 解析service 3.2.3 init控制service 3.2.4 属性服务 3.3 本章小结 第4章 深入理解zygote 4.1 概述 4.2 zygote分析 4.2.1 AppRuntime分析 4.2.2 Welcome to Java World 4.2.3 关于zygote的总结 4.3 SystemServer分析 4.3.1 SystemServer的诞生 4.3.2 SystemServer的重要使命 4.3.3 关于 SystemServer的总结 4.4 zygote的分裂 4.4.1 ActivityManagerService发送请求 4.4.2 有求必应之响应请求 4.4.3 关于zygote分裂的总结 4.5 拓展思考 4.5.1 虚拟机heapsize的限制 4.5.2 开机速度优化 4.5.3 Watchdog分析 4.6 本章小结 第5章 深入理解常见类 5.1 概述 5.2 以“三板斧”揭秘RefBase、sp和wp 5.2.1 第一板斧--初识影子对象 5.2.2 第二板斧--由弱生强 5.2.3 第三板斧--破解生死魔咒 5.2.4 轻量级的引用计数控制类LightRefBase 5.2.5 题外话-三板斧的来历 5.3 Thread类及常用同步类分析 5.3.1 一个变量引发的思考 5.3.2 常用同步类 5.4 Looper和Handler类分析 5.4.1 Looper类分析 5.4.2 Handler分析 5.4.3 Looper和Handler的同步关系 5.4.4 HandlerThread介绍 5.5 本章小结 第6章 深入理解Binder 6.1 概述 6.2 庖丁解MediaServer 6.2.1 MediaServer的入口函数 6.2.2 独一无二的ProcessState 6.2.3 时空穿越魔术-defaultServiceManager 6.2.4 注册MediaPlayerService 6.2.5 秋风扫落叶-StartThread Pool和join Thread Pool分析 6.2.6 你彻底明白了吗 6.3 服务总管ServiceManager 6.3.1 ServiceManager的原理 6.3.2 服务的注册 6.3.3 ServiceManager存在的意义 6.4 MediaPlayerService和它的Client 6.4.1 查询ServiceManager 6.4.2 子承父业 6.5 拓展思考 6.5.1 Binder和线程的关系 6.5.2 有人情味的讣告 6.5.3 匿名Service 6.6 学以致用 6.6.1 纯Native的Service 6.6.2 扶得起的“阿斗”(aidl) 6.7 本章小结 第7章 深入理解Audio系统 7.1 概述 7.2 AudioTrack的破解 7.2.1 用例介绍 7.2.2 AudioTrack(Java空间)分析 7.2.3 AudioTrack(Native空间)分析 7.2.4 关于AudioTrack的总结 7.3 AudioFlinger的破解 7.3.1 AudioFlinger的诞生 7.3.2 通过流程分析AudioFlinger 7.3.3 audio_track_cblk_t分析 7.3.4 关于AudioFlinger的总结 7.4 AudioPolicyService的破解 7.4.1 AudioPolicyService的创建 7.4.2 重回AudioTrack 7.4.3 声音路由切换实例分析 7.4.4 关于AudioPol

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值