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设备了。

相关文章
|
5月前
|
机器学习/深度学习 文字识别 监控
安全监控系统:技术架构与应用解析
该系统采用模块化设计,集成了行为识别、视频监控、人脸识别、危险区域检测、异常事件检测、日志追溯及消息推送等功能,并可选配OCR识别模块。基于深度学习与开源技术栈(如TensorFlow、OpenCV),系统具备高精度、低延迟特点,支持实时分析儿童行为、监测危险区域、识别异常事件,并将结果推送给教师或家长。同时兼容主流硬件,支持本地化推理与分布式处理,确保可靠性与扩展性,为幼儿园安全管理提供全面解决方案。
235 3
|
6月前
|
弹性计算 运维 安全
优化管理与服务:操作系统控制平台的订阅功能解析
本文介绍了如何通过操作系统控制平台提升系统效率,优化资源利用。首先,通过阿里云官方平台开通服务并安装SysOM组件,体验操作系统控制平台的功能。接着,详细讲解了订阅管理功能,包括创建订阅、查看和管理ECS实例的私有YUM仓库权限。订阅私有YUM仓库能够集中管理软件包版本、提升安全性,并提供灵活的配置选项。最后总结指出,使用阿里云的订阅和私有YUM仓库功能,可以提高系统可靠性和运维效率,确保业务顺畅运行。
|
3月前
|
网络协议 安全 区块链
DNS+:互联网的下一个十年,为什么域名系统正在重新定义数字生态? ——解读《“DNS+”发展白皮书(2023)》
DNS+标志着域名系统从基础寻址工具向融合技术、业态与治理的数字生态中枢转变。通过与IPv6、AI和区块链结合,DNS实现了智能调度、加密传输等新功能,支持工业互联网、Web3及万物互联场景。当前,中国IPv6用户达7.6亿,全球DNSSEC支持率三年增长80%,展现了其快速发展态势。然而,DNS+仍面临安全威胁、技术普惠瓶颈及生态协同挑战。未来,需推动零信任DNS模型、加强威胁情报共享,并加速标准制定,以筑牢数字时代网络根基,实现更安全、高效的数字生态建设。
260 3
|
3月前
|
安全 Java Android开发
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
164 0
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
|
4月前
|
网络协议 安全 Devops
Infoblox DDI (NIOS) 9.0 - DNS、DHCP 和 IPAM (DDI) 核心网络服务管理
Infoblox DDI (NIOS) 9.0 - DNS、DHCP 和 IPAM (DDI) 核心网络服务管理
127 4
|
5月前
|
安全 搜索推荐 Android开发
Android系统SELinux安全机制详解
如此看来,SELinux对于大家来说,就像那位不眠不休,严阵以待的港口管理员,守护我们安卓系统的平安,维护这片海港的和谐生态。SELinux就这样,默默无闻,却卫士如山,给予Android系统一份厚重的安全保障。
187 18
|
6月前
|
XML JavaScript Android开发
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
165 15
|
6月前
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
|
6月前
|
传感器 人工智能 监控
反向寻车系统怎么做?基本原理与系统组成解析
本文通过反向寻车系统的核心组成部分与技术分析,阐述反向寻车系统的工作原理,适用于适用于商场停车场、医院停车场及火车站停车场等。如需获取智慧停车场反向寻车技术方案前往文章最下方获取,如有项目合作及技术交流欢迎私信作者。
408 2
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
AI技术如何重塑客服系统?解析合力亿捷AI智能客服系统实践案例
本文探讨了人工智能技术在客服系统中的应用,涵盖技术架构、关键技术和优化策略。通过感知层、认知层、决策层和执行层的协同工作,结合自然语言处理、知识库构建和多模态交互技术,合力亿捷客服系统实现了智能化服务。文章还提出了用户体验优化、服务质量提升和系统性能改进的方法,并展望了未来发展方向,强调其在客户服务领域的核心价值与潜力。
308 6

推荐镜像

更多