一、SystemServer介绍
SystemServer是Android系统中的一个重要进程,它负责启动和管理系统中的各种服务。这些服务包括WindowManagerServer(WMS)、ActivityManagerService(AMS)和PackageManagerServer(PMS)等。SystemServer进程在系统中的名称为"system_server"。
SystemServer的主要职责是启动和管理系统服务。它在系统启动时被启动,并负责创建和初始化系统服务。SystemServer会按照特定的顺序逐个启动系统服务,并确保它们按照正确的顺序初始化和运行。
SystemServer的启动过程包括以下几个步骤:
-
创建一个新的Zygote进程,该进程将作为SystemServer的父进程。
-
在Zygote进程中创建一个新的SystemServer进程。
-
SystemServer进程启动后,会创建并初始化各个系统服务,包括WMS、AMS、PMS等。
-
SystemServer会根据配置文件中的设置来启动其他需要的系统服务。
-
SystemServer会监听系统广播和事件,并根据需要调用相应的系统服务进行处理。
SystemServer是android基本服务的提供者,是android系统运行的最基本需求,所有server运行在一个叫system_process的进程中,system_process进程是android java虚拟机跑的第一个进程,从Zygote 创建而来,是andorid系统最重要的java虚拟机。可以说,整个android系统的业务都是围绕system server而展开,所以,当system_process死掉了,系统必须重启。
二、SystemServer相关类
SystemServer
SystemServer负责启动和管理系统的核心服务。SystemServer.java在系统启动过程中被调用,它会创建并启动各种系统服务,例如ActivityManagerService、PackageManagerService、WindowManagerService等。这些系统服务是Android系统的基础,它们提供了各种功能和服务,使得Android系统能够正常运行。
SystemServer文件路径:
frameworks/base/core/java/com/android/server/SystemServer.java
SystemServer定义:
public final class SystemServer implements Dumpable {
private final class SystemServerDumper extends Binder {} //Service used to dump {@link SystemServer} state that is not associated with any service.
}
SystemServer方法:
public static void main(String[] args) :The main entry point from zygote.
public SystemServer() :构造方法
private void run()
private void performPendingShutdown()
private void createSystemContext()
private void startBootstrapServices(@NonNull TimingsTraceAndSlog t): Starts the small tangle of critical services that are needed to get the system off the ground.
private void startCoreServices(@NonNull TimingsTraceAndSlog t) :Starts some essential services that are not tangled up in the bootstrap process.
private void startOtherServices(@NonNull TimingsTraceAndSlog t) :Starts a miscellaneous grab bag of stuff that has yet to be refactored and organized.
private void startApexServices(@NonNull TimingsTraceAndSlog t):Starts system services defined in apexes.
private void startSystemCaptionsManagerService(@NonNull Context context, @NonNull TimingsTraceAndSlog t)
private void startTextToSpeechManagerService(@NonNull Context context, @NonNull TimingsTraceAndSlog t)
private void startContentCaptureService(@NonNull Context context, @NonNull TimingsTraceAndSlog t)
private void startAttentionService(@NonNull Context context, @NonNull TimingsTraceAndSlog t)
private void startRotationResolverService(@NonNull Context context, @NonNull TimingsTraceAndSlog t)
private void startAmbientContextService(@NonNull TimingsTraceAndSlog t)
private static void startSystemUi(Context context, WindowManagerService windowManager)
private static boolean handleEarlySystemWtf(final IBinder app, final String tag, boolean system, final ApplicationErrorReport.ParcelableCrashInfo crashInfo, int immediateCallerPid)
SystemService
SystemService是Android系统中的一个关键类,它负责管理和提供各种系统服务。在Android框架中,系统服务是一组用于提供核心功能的组件,例如窗口管理、通知管理、电源管理等。SystemService类是所有系统服务的基类,其他系统服务要么直接继承SystemService类,要么创建静态内部类Lifecycle继承SystemService类。
该类定义了系统服务的基本结构和生命周期方法,包括onStart、onBootPhase、onSwitchUser等方法。通过重写这些方法,系统服务可以在不同的系统阶段执行特定的操作。
-
onStart方法:在SystemServer启动时调用,用于初始化系统服务。在该方法中,会创建并启动各种系统服务,如ActivityManagerService、PackageManagerService、WindowManagerService等。这些系统服务是Android系统的核心组件,负责管理应用程序的运行、资源分配、窗口管理等功能。
-
onBootPhase方法:在SystemServer启动过程中的不同阶段调用,用于按照启动顺序初始化系统服务。Android系统的启动过程分为多个阶段,每个阶段都有对应的系统服务需要初始化。通过在onBootPhase方法中指定不同的阶段参数,可以确保系统服务按照正确的顺序初始化。
-
onSwitchUser方法:在用户切换时调用,用于处理用户切换相关的逻辑。Android系统支持多用户环境,每个用户都有自己的应用程序和数据。当用户切换时,需要进行一些清理和准备工作,以确保新用户能够正常使用系统。
SystemService类的主要作用是提供一个统一的接口,使得系统服务可以在系统启动时进行初始化,并在系统运行期间提供相应的功能和服务。它还负责管理系统服务的生命周期,确保系统服务在需要时正确启动和停止。
SystemService文件路径:
frameworks/base/core/java/android/os/SystemService.java
SystemService定义:
public abstract class SystemService {
public static final class TargetUser {}
public static final class UserCompletedEventType {}
}
SystemService方法:
public SystemService(@NonNull Context context):构造函数
public final Context getContext():Gets the system context.
public final Context getUiContext():Get the system UI context.
public final boolean isSafeMode():Returns true if the system is running in safe mode.
public abstract void onStart():Called when the system service should publish a binder service using {@link #publishBinderService(String, IBinder).}
public void onBootPhase(@BootPhase int phase):Called on each phase of the boot process.
public boolean isUserSupported(@NonNull TargetUser user):Checks if the service should be available for the given user.
public void onUserStarting(@NonNull TargetUser user):Called when a new user is starting, for system services to initialize any per-user state they maintain for running users.
public void onUserUnlocking(@NonNull TargetUser user):Called when an existing user is in the process of being unlocked.
public void onUserUnlocked(@NonNull TargetUser user):Called after an existing user is unlocked.
public void onUserSwitching(@Nullable TargetUser from, @NonNull TargetUser to):Called when switching to a different foreground user, for system services that have special behavior for whichever user is currently in the foreground.
public void onUserStopping(@NonNull TargetUser user):Called when an existing user is stopping, for system services to finalize any per-user state they maintain for running users.
public void onUserStopped(@NonNull TargetUser user):Called after an existing user is stopped.
public void onUserCompletedEvent(@NonNull TargetUser user, UserCompletedEventType eventType):Called some time <i>after</i> an onUser... event has completed, for the events delineated in {@link UserCompletedEventType}.
SystemServiceManager
SystemServiceManager负责管理和维护系统服务的生命周期。SystemServiceManager.java会在SystemServer.java的启动过程中被实例化,并负责创建和启动各个系统服务。它还负责处理系统服务的依赖关系,确保系统服务按照正确的顺序启动,并在需要时进行重启或关闭。
SystemServiceManager文件路径:
frameworks/base/core/java/com/android/server/SystemServiceManager.java
SystemServiceManager定义:
public final class SystemServiceManager implements Dumpable {}
SystemServiceManager方法:
SystemServiceManager(Context context):构造方法
public SystemService startService(String className):Starts a service by class name.
public SystemService startServiceFromJar(String className, String path):Starts a service by class name and a path that specifies the jar where the service lives.
private static Class<SystemService> loadClassFromLoader(String className, ClassLoader classLoader) :Loads and initializes a class from the given classLoader. Returns the class.
public <T extends SystemService> T startService(Class<T> serviceClass):Creates and starts a system service.
public void startService(@NonNull final SystemService service)
public void startBootPhase(@NonNull TimingsTraceAndSlog t, int phase):Starts the specified boot phase for all system services that have been started up to this point.
public void updateOtherServicesStartIndex():Called from SystemServer to indicate that services in the other category are now starting.
public void onUserStarting(@NonNull TimingsTraceAndSlog t, @UserIdInt int userId):Starts the given user.
public void onUserUnlocking(@UserIdInt int userId):Unlocks the given user.
public void onUserUnlocked(@UserIdInt int userId):Called after the user was unlocked.
public void onUserSwitching(@UserIdInt int from, @UserIdInt int to) :Switches to the given user.
public void onUserStopping(@UserIdInt int userId):Stops the given user.
public void onUserStopped(@UserIdInt int userId):Cleans up the given user.
public void onUserCompletedEvent(@UserIdInt int userId, @UserCompletedEventType.EventTypesFlag int eventFlags):Called some time <i>after</i> an onUser... event has completed, for the events delineated in {@link UserCompletedEventType}.
StrictMode
StrictMode类是Android 2.3 (API 9)引入的一个工具类,可以用来帮助开发者发现代码中的一些不规范的问题,以达到提升应用响应能力的目的。举个例子来说,如果开发者在UI线程中进行了网络操作或者文件系统的操作,而这些缓慢的操作会严重影响应用的响应能力,甚至出现ANR对话框。为了在开发中发现这些容易忽略的问题,我们使用StrictMode,系统检测出主线程违例的情况并做出相应的反应,最终帮助开发者优化和改善代码逻辑。
StrictMode文件路径:
frameworks/base/core/java/android/os/StrictMode.java
StrictMode定义:
public final class StrictMode {}
三、SystemServer中启动服务
startBootstrapServices:引导服务
服务名 | 功能简介 |
---|---|
Installer.class | 创建具有合适权限的关键目录,如/data/user |
ActivityTaskManagerService | 简称ATMS,管理着四大组件的生命周期 |
PowerManagerService | 电源管理服务 |
RecoverySystemService | 系统恢复 |
LightsService | 管理设备各种led灯和显示背光 |
DisplayManagerService | 管理显示器的全局生命周期,决定如何根据当前连接的物理显示设备配置逻辑显示,在状态更改时向系统和应用程序发送通知等。 |
PackageManagerService | 简称PMS,用于APK的权限验证、安装、删除等操作 |
UserManagerService | 主要功能是创建和删除用户,以及查询用户信息。 |
OverlayManagerService | 可以在运行时动态替换res,如图片。简单来说就是一个普通apk有若干res,另一个相关的overlay apk有相同的res,关闭overlay apk时,普通apk运行时加载的是自己本身的res,而打开overlay apk时,普通apk运行时加载的则是overlay apk中的res。 |
SensorPrivacyService | 提供了一个开发者选项设置,用于关闭设备中的所有传感器。 |
startCoreServices:核心服务
服务名 | 功能简介 |
---|---|
BatteryService | 对设备电池状态进行监控的服务,当电池,充电状态,温度等信息发生变化时,会以广播的形式通知其他相关的进程和服务。 |
UsageStatsService | 收集用户对每一个APP的使用频率,使用时间等信息。 |
WebViewUpdateService | 用户WebView的更新 |
BinderCallsStatsService | 跟踪Binder调用的CPU时间消耗 |
BugreportManagerService | 捕获bugreports的服务 |
GpuService | GPU服务 |
startOtherServices:其他服务
服务 | 功能简介 |
---|---|
KeyAttestationApplicationIdProviderService | 提供了描述由UID标识的可能应用程序的信息 |
SchedulingPolicyService | 管理系统调度策略的服务 |
TelecomLoaderService | 通话逻辑控制 |
AccountManagerService | 负责管理手机中用户的在线账户 |
ContentService | 管理系统数据更新通知的服务,和ContentProvider密切相关 |
DropBoxManagerService | 生成和管理系统运行中日志文件的服务 |
VibratorService | 管理系统振动器的服务 |
DynamicSystemService | 安全模式 |
ConsumerIrService | 远程控制,通过红外等控制周围的设备(例如电视等) |
AlarmManagerService | AlarmManagerService |
InputManagerService | 输入管理服务,负责Android输入系统的管理,职责包括:输入设备的管理,输入事件的加工,输入事件的派发与反馈,输入事件的派发ANR的检测,是Andorid系统核心服务之一。 |
WindowManagerService | 窗口管理服务,负责窗口的启动,添加,删除等,是Andorid系统核心服务之一。 |
VrManagerService | Vr管理服务 |
BluetoothService | 蓝牙服务 |
IpConnectivityMetrics | 记录IpConnectvity事件的类 |
PinnerService | 基于mmap内存映射机制,将系统运行常访问的文件Lock锁定到内存缓存中,以提升文件读写的性能,减少真正发生I/O磁盘读写的概率,减轻系统的I/O负载 |
InputMethodManagerService | 输入法服务 |
MultiClientInputMethodManagerService | 多会话输入法服务 |
AccessibilityManagerService | 截获用户输入,并根据输入给用户一些额外的反馈,起到辅助效果的服务 |
StorageManagerService | 管理存储设备。其中的存储设备分内部存储和外部存储,外部存储可以有SDCard、U盘等其他挂载的外设。 |
StorageStatsService | 磁盘存储的服务提供了相关应用程序、用户以及外部/共享存储如何计算磁盘空间 |
UiModeManagerService | 管理设备UI模式,汽车模式、电视模式、手表模式、黑夜模式等。 |
LockSettingsService | 管理系统锁屏设置的服务 |
DeviceIdleController | 控制设备的Idle状态 |
DevicePolicyManagerService | 提供一些系统级别的设置和属性 |
StatusBarManagerService | 系统状态栏服务 |
NetworkManagementService | NetworkManagementService |
TextServicesManagerService | 文本拼写检查的服务 |
NetworkScoreService | 网络评分服务 |
NetworkStatsService | 管理网络连接状态的服务 |
NetworkPolicyManagerService | 管理网络连接策略的服务 |
WifiService | Wifi服务 |
WifiScanningService | Wifi 扫描服务 |
RttService | RTT服务 |
WifiAwareService | 无线感知服务 |
WifiP2PService | Wifi P2P服务 |
EthernetService | 网络服务 |
ConnectivityService | 管理网络连接的服务 |
NsdService | Network Service Discovery.翻译过来的意思就是发现服务器网络的意思。理解的说就是:发现服务器对应的网络信息。 |
SystemUpdateManagerService | 系统升级服务 |
UpdateLockService | 提供升级锁服务 |
NotificationManagerService | 管理系统通知的服务 |
DeviceStorageMonitorService | 管理系统存储空间的服务,当存储空间小于某个阈值时,会发出警告广播 |
LocationManagerService | 位置服务,用户GPS定位等。 |
CountryDetectorService | 检测当前系统所属国家的服务 |
TimeDetectorService | 时间探测器服务 |
SearchManagerService | 提供全局搜索服务 |
WallpaperManagerService | 管理系统桌面背景墙纸的服务 |
AudioService | Audio服务 |
BroadcastRadioService | 收音机服务 |
DockObserver | 如果系统有个座子,当手机装上或拔出这个座子的话,就得靠他来管理了 |
WiredAccessoryManager | 监视手机和底座上的耳机 |
MidiManager | Midi管理 |
AdbService | adb服务 |
UsbService | USB服务 |
SerialService | 串口服务 |
HardwarePropertiesManagerService | 硬件属性管理器服务 |
TwilightService | 指出用户当前所在位置是否为晚上,被UiModeManager等用来调整夜间模式 |
ColorDisplayService | 护眼模式 |
JobSchedulerService | 一个系统提供的框架,旨于在应用进程、而非系统进程内执行各种作业调度,其原理是启动通过bindservice的方式启动对应应用进程的service,并在Service中进行作业。在执行一个Job时,将会使得系统持有一个WakeLock锁,以防止系统休眠进入Suspend。 |
TrustManagerService | 信任管理器服务 |
BackupManagerService | 管理备份和应用数据的服务 |
AppWidgetService | widge管理,widget安装、删除、更新等 |
RoleManagerService | 管理默认应用设置 |
VoiceRecognitionManager | 语音识别管理器 |
GestureLauncherService | |
SensorNotificationService | |
ContextHubSystemService | |
DiskStatsService | 磁盘统计服务 |
RuntimeService | 管理流程在运行时产生的数据 |
TimeZoneRulesManagerService | |
NetworkTimeUpdateService | 根据网络时间更新本地时间的服务 |
EmergencyAffordanceService | 紧急呼叫服务 |
DreamManagerService | 管理屏保 |
PrintManagerService | 打印服务 |
CompanionDeviceManagerService | 配套设备管理器服务 |
RestrictionsManagerService | 限制管理服务 |
MediaSessionService | 多媒体会话服务 |
HdmiControlService | hdmi控制服务 |
MediaResourceMonitorService | 媒体资源监控服务 |
TvRemoteService | 电视相关服务 |
TvInputManagerService | |
MediaRouterService | 媒体资源服务 |
FaceService | 人脸识别服务 |
FingerprintService | 指纹服务 |
BiometricService | 生物识别服务 |
BackgroundDexOptService | 主要用于classes文件的odex优化 |
LauncherAppsService | 查询系统中app的数据集合的作用 |
MediaProjectionManagerService | 准许APP拥有截取屏幕或者是记录系统音频的能力 |
WearPowerService | 穿戴设备相关服务 |
WearConnectivityService | |
WearDisplayService | |
WearTimeService | |
WearLeftyService | |
WearGlobalActionsService | |
CameraService | 管理设备相机功能 |
IoTSystemService | 物联网系统服务 |
MmsService | Mms服务,能够处理短信和彩信 |
AutoFillService | 能帮助我们实现自动填充屏幕内容的服务类 |
ClipboardService | 管理系统剪贴板的服务 |
PermissionPolicyService | 权限策略服务 |
DeviceSpecificServices | 特定于设备的服务 |
CarServiceHelperService | 汽车相关的服务的启动主要依靠一个系统服务CarServiceHelperService开机时在SystemServer中启动 |
SystemUI | 系统UI |
ContentCaptureService | 内容捕获服务 |