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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 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设备了。

相关文章
|
23天前
|
Java 开发工具 Android开发
Android与iOS开发环境搭建全解析####
本文深入探讨了Android与iOS两大移动操作系统的开发环境搭建流程,旨在为初学者及有一定基础的开发者提供详尽指南。我们将从开发工具的选择、环境配置到第一个简单应用的创建,一步步引导读者步入移动应用开发的殿堂。无论你是Android Studio的新手还是Xcode的探索者,本文都将为你扫清开发道路上的障碍,助你快速上手并享受跨平台移动开发的乐趣。 ####
|
16天前
|
存储 Linux API
深入探索Android系统架构:从内核到应用层的全面解析
本文旨在为读者提供一份详尽的Android系统架构分析,从底层的Linux内核到顶层的应用程序框架。我们将探讨Android系统的模块化设计、各层之间的交互机制以及它们如何共同协作以支持丰富多样的应用生态。通过本篇文章,开发者和爱好者可以更深入理解Android平台的工作原理,从而优化开发流程和提升应用性能。
|
12天前
|
安全 前端开发 Android开发
探索移动应用与系统:从开发到操作系统的深度解析
在数字化时代的浪潮中,移动应用和操作系统成为了我们日常生活的重要组成部分。本文将深入探讨移动应用的开发流程、关键技术和最佳实践,同时分析移动操作系统的核心功能、架构和安全性。通过实际案例和代码示例,我们将揭示如何构建高效、安全且用户友好的移动应用,并理解不同操作系统之间的差异及其对应用开发的影响。无论你是开发者还是对移动技术感兴趣的读者,这篇文章都将为你提供宝贵的见解和知识。
|
13天前
|
监控 Java Android开发
深入探索Android系统的内存管理机制
本文旨在全面解析Android系统的内存管理机制,包括其工作原理、常见问题及其解决方案。通过对Android内存模型的深入分析,本文将帮助开发者更好地理解内存分配、回收以及优化策略,从而提高应用性能和用户体验。
|
14天前
|
存储 安全 Android开发
探索Android系统的最新安全特性
在数字时代,智能手机已成为我们生活中不可或缺的一部分。随着技术的不断进步,手机操作系统的安全性也越来越受到重视。本文将深入探讨Android系统最新的安全特性,包括其设计理念、实施方式以及对用户的影响。通过分析这些安全措施如何保护用户免受恶意软件和网络攻击的威胁,我们希望为读者提供对Android安全性的全面了解。
|
16天前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
17天前
|
负载均衡 网络协议 算法
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
44 3
|
20天前
|
机器学习/深度学习 人工智能 数据处理
【AI系统】NV Switch 深度解析
英伟达的NVSwitch技术是高性能计算领域的重大突破,旨在解决多GPU系统中数据传输的瓶颈问题。通过提供比PCIe高10倍的带宽,NVLink实现了GPU间的直接数据交换,减少了延迟,提高了吞吐量。NVSwitch则进一步推动了这一技术的发展,支持更多NVLink接口,实现无阻塞的全互联GPU系统,极大提升了数据交换效率和系统灵活性,为构建强大的计算集群奠定了基础。
44 3
|
20天前
|
安全 Android开发 iOS开发
深入探讨Android与iOS系统的差异及未来发展趋势
本文旨在深入分析Android和iOS两大移动操作系统的核心技术差异、用户体验以及各自的市场表现,进一步探讨它们在未来技术革新中可能的发展方向。通过对比两者的开放性、安全性、生态系统等方面,本文揭示了两大系统在移动设备市场中的竞争态势和潜在变革。
|
19天前
|
前端开发 Android开发 UED
移动应用与系统:从开发到优化的全面解析####
本文深入探讨了移动应用开发的全过程,从最初的构思到最终的发布,并详细阐述了移动操作系统对应用性能和用户体验的影响。通过分析当前主流移动操作系统的特性及差异,本文旨在为开发者提供一套全面的开发与优化指南,确保应用在不同平台上均能实现最佳表现。 ####
22 0

推荐镜像

更多