Android SystemServer介绍

一、SystemServer介绍

SystemServer是Android系统中的一个重要进程,它负责启动和管理系统中的各种服务。这些服务包括WindowManagerServer(WMS)、ActivityManagerService(AMS)和PackageManagerServer(PMS)等。SystemServer进程在系统中的名称为"system_server"。

SystemServer的主要职责是启动和管理系统服务。它在系统启动时被启动,并负责创建和初始化系统服务。SystemServer会按照特定的顺序逐个启动系统服务,并确保它们按照正确的顺序初始化和运行。

SystemServer的启动过程包括以下几个步骤:

  1. 创建一个新的Zygote进程,该进程将作为SystemServer的父进程。

  2. 在Zygote进程中创建一个新的SystemServer进程。

  3. SystemServer进程启动后,会创建并初始化各个系统服务,包括WMS、AMS、PMS等。

  4. SystemServer会根据配置文件中的设置来启动其他需要的系统服务。

  5. 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等方法。通过重写这些方法,系统服务可以在不同的系统阶段执行特定的操作。

  1. onStart方法:在SystemServer启动时调用,用于初始化系统服务。在该方法中,会创建并启动各种系统服务,如ActivityManagerService、PackageManagerService、WindowManagerService等。这些系统服务是Android系统的核心组件,负责管理应用程序的运行、资源分配、窗口管理等功能。

  2. onBootPhase方法:在SystemServer启动过程中的不同阶段调用,用于按照启动顺序初始化系统服务。Android系统的启动过程分为多个阶段,每个阶段都有对应的系统服务需要初始化。通过在onBootPhase方法中指定不同的阶段参数,可以确保系统服务按照正确的顺序初始化。

  3. 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

内容捕获服务

四、SystemServer相关流程解析

SystemServer启动流程分析

Android13 SystemServer启动流程分析-CSDN博客

  • 8
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值