Android核心服务解析篇(三)——Android系统的启动(二)

简介: Android核心服务解析篇(三)——Android系统的启动(二)

2.创建system_service进程


在init进程的启动过程中,比较重要的部分由孵化进程启动system_service进程,下面详细介绍一下这个部分。system_service进程将会为我们创建一些重要的Android核心服务,包括ActivityManagerService,PackageManagerService和PowerManagerService等,这些将成为应用程序的基础,并为应用程序提供必要的接口。


①创建流程


完成应用程序的初始化之后,init进程将创建一个名叫system_service的重要进程,而我们将在此进程中创建Android核心服务。下图显示了system_process进程以及核心服务的创建过程。


5.png

6.png

7.png


注解1:init进程会按顺序启动各种类型的服务(包括core和main)。首先启动core类型的服务。然后启动main类型的服务。由于孵化服务为main类型,所以它会在core类型的服务之后启动。因此,这里启动用于管理服务的服务——servicemanager。启动和入口如下所示。


❶启动:service zygote /system/bin/app_process -Xzygote /system/bin --zygote--start-system-server


❷入口:/frameworks/base/cmds/app_process/app_main.cpp的main()函数。


注解2:此时转向/frameworks/base/core/jni/AndroidRuntime.cpp的start()函数。


注解3:启动代码如下:

jmethodId startMeth=env->GetStaticMethodID(startClass,"main",....);
env->CallStaticVoidMethod(startClass,startMeth,strArray);


此时转向com.android.internal.os.ZygoteInit的main()方法执行。


注解4:


❶加载frameworks下的preloaded-classes类。


❷加载framework-res.apk下的资源。


注解5:孵化进程的主要目的就是孵化出system_process进程,这个时候流程将转向/frameworks/base/services/java/com/android/server/SystemServer.java的main()方法执行,而自身进入死循环成为守护进程。


注解6:init1()调用本地android_server_SystemServer_init1(/frameworks/base/services/jni/com_android_server_SystemServer.cpp)后,通过libAndroid_servers.So的system_init()函数启动两个服务并启动init2()、


注解7:这里启动并注册剩余的必需服务(比如包服务和Activity服务等)。最终会启动Launcher来到桌面,至此整个启动过程完成。


②system_service简介


system_service进程非常重要,它创建了许多重要的服务,那么如何加入system_service中并接受管理呢?具体如下面的代码所示:

try{
Slog.i(TAG,"Backup Service");
ServiceManager.addService(Context.BACKUP_SERVICE,new BackupManagerService(context));
}catch(Throwable e){
Slog.e(TAG,"Failure starting Backup Service",e);
}


以上代码展示了system_process如何将备份服务加入服务管理器中的,其中粗体部分的代码完成了两件事情:第一,创建备份服务;第二,使用ServiceManager的addService()方法将创建出来的备份服务实例加入服务管理器中加以管理。


下表列出了system_service的服务关键字等知识。


服务关键字

备注
entropy EntropyService 熵服务
power PowerManagerService 电源管理服务(Context.POWER_SERVICE)
activity ActivityManagerService Activity管理服务
telephony.registry TelephonyRegistry

电话服务

package PackageManagerService 包管理服务
account AccountManagerService 账户管理服务(Context.ACCOUT_SERVICE)
battery BatteryService 电池服务
vibrator VibratorService 振动服务
alarm AlarmManagerService 报警服务(Context.ALARM_SERVICE)
window WindowManagerService 窗口服务(Context.WINDOW_SERVICE)
bluetooth BluetoothService 蓝牙服务(BluetoothAdapter.BLUETOOTH_SERVICE)
statusbar StatusBarManagerService 状态栏服务(Context.STATUS_BAR_SERVICE)
input_method InputMethodManagerService 输入法管理服务(Context.INPUT_METHOD_SERVICE)
location LocationManagerService 位置管理服务(Context.LOCATION_SERVICE)
wallpaper WallpaperManagerService 壁纸管理服务(Context.WALLPAPER_SERVICE)
audio AudioService 声音服务(Context.AUDIO_SERVICE)
user UserManagerService 用户管理服务(Context.USER_SERVICE)


下面以获取声音服务为例介绍获取服务的方法:


AudioService as=(AudioService)context.getSystemService(Context.AUDIO_SERVICE);


此时整个系统也就完成了启动工作,这也意味着我们可以开始使用Android设备了。

相关文章
|
4天前
|
Android开发
Android 11 添加Service服务SELinux问题
Android 11 添加Service服务SELinux问题
13 1
|
14天前
|
监控 负载均衡 Cloud Native
ZooKeeper分布式协调服务详解:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入剖析ZooKeeper分布式协调服务原理,涵盖核心概念如Server、Client、ZNode、ACL、Watcher,以及ZAB协议在一致性、会话管理、Leader选举中的作用。讨论ZooKeeper数据模型、操作、会话管理、集群部署与管理、性能调优和监控。同时,文章探讨了ZooKeeper在分布式锁、队列、服务注册与发现等场景的应用,并在面试方面分析了与其它服务的区别、实战挑战及解决方案。附带Java客户端实现分布式锁的代码示例,助力提升面试表现。
30 2
|
18天前
|
存储 缓存 NoSQL
深入解析Redis:一种快速、高效的键值存储系统
**Redis** 是一款高性能的键值存储系统,以其内存数据、高效数据结构、持久化机制和丰富的功能在现代应用中占有一席之地。支持字符串、哈希、列表、集合和有序集合等多种数据结构,适用于缓存、计数、分布式锁和消息队列等场景。安装Redis涉及下载、编译和配置`redis.conf`。基本操作包括键值对的设置与获取,以及哈希、列表、集合和有序集合的操作。高级特性涵盖发布/订阅、事务处理和Lua脚本。优化策略包括选择合适数据结构、配置缓存和使用Pipeline。注意安全、监控和备份策略,以确保系统稳定和数据安全。
223 1
|
24天前
|
XML Java Android开发
Android实现自定义进度条(源码+解析)
Android实现自定义进度条(源码+解析)
51 1
|
1月前
|
算法 Linux C++
【Linux系统编程】解析获取和设置文件信息与权限的Linux系统调用
【Linux系统编程】解析获取和设置文件信息与权限的Linux系统调用
29 0
|
1月前
|
算法 Linux C++
【Linux系统编程】深入解析Linux中read函数的错误场景
【Linux系统编程】深入解析Linux中read函数的错误场景
205 0
|
4天前
|
存储 开发工具 对象存储
Javaweb之SpringBootWeb案例之阿里云OSS服务入门的详细解析
Javaweb之SpringBootWeb案例之阿里云OSS服务入门的详细解析
11 0
|
15天前
|
分布式计算 资源调度 监控
Hadoop生态系统深度剖析:面试经验与必备知识点解析
本文深入探讨了Hadoop生态系统的面试重点,涵盖Hadoop架构、HDFS、YARN和MapReduce。了解Hadoop的主从架构、HDFS的读写流程及高级特性,YARN的资源管理与调度,以及MapReduce编程模型。通过代码示例,如HDFS文件操作和WordCount程序,帮助读者巩固理解。此外,文章强调在面试中应结合个人经验、行业动态和技术进展展示技术实力。
|
15天前
|
监控 测试技术 Android开发
移动应用与系统:开发与操作系统的深度解析
【4月更文挑战第11天】在这篇文章中,我们将深入探讨移动应用的开发过程,以及移动操作系统如何影响这些应用的性能和功能。我们将详细分析移动应用开发的关键步骤,包括需求分析、设计、编码、测试和维护。同时,我们也将探讨移动操作系统,如Android和iOS,如何为应用开发提供支持,并影响其性能。
|
23天前
|
数据挖掘
深入解析ERP系统的人力资源管理模块
深入解析ERP系统的人力资源管理模块
24 1

推荐镜像

更多