Android系统中的SystemService

2020-06-14  本文已影响0人  棒棒0_0

1. android启动系统服务的方式

mSystemServiceManager.startService(PowerManagerService.class)

该方式用于启动继承于SystemService的服务。主要功能包含创建serviceClass的对象,将刚创建的对象添加到SystemServiceManager的成员变量mServices,再调用刚创建对象的onStart()方法。对于服务启动到一定阶段,进入相应的Phase时,会调用SystemServiceManager的startBootPhase()回调方法,该方法会循环遍历所有向SystemServiceManager注册过的onBootPhase()方法。

ServiceManager.addService("telephony.registry", telephonyRegistry);

改方式用于初始化继承于IBinder的服务。主要功能包含将服务向Native层的ServiceManager注册服务。

2. SystemService的生命周期

3. onBootPhase的阶段

Phase Comments
PHASE_WAIT_FOR_DEFAULT_DISPLAY 等待显示阶段
PHASE_LOCK_SETTINGS_READY 锁定阶段:在此阶段,service就可以获得锁定的设置数据
PHASE_SYSTEM_SERVICES_READY 系统服务准备就绪阶段:在此阶段,service可以安心的调用核心系统服务,比如PowerManager或者PackageManager
PHASE_ACTIVITY_MANAGER_READY AMS准备就绪阶段:在启动阶段后,service就可以发送广播了
PHASE_THIRD_PARTY_APPS_CAN_START 启动第三方应用阶段:在启动阶段后,服务就可以启动/绑定第三方应用程序App就可以。并在此时调用Binder服务
PHASE_BOOT_COMPLETED 启动结束阶段:在此阶段,此时服务可以运行用户与设备进行交互。当启动完成后Home应用程序会在此阶段启动。系统服务可能会监听这个阶段,而不是注册ACTION_BOOT_COMPLETED的广播接收器来减少整体延迟

4. onBootPhase启动的流程

SystemServiceManager的startBootPhase()贯穿system_server进程的整个启动过程
上一篇 下一篇

猜你喜欢

热点阅读