美文网首页
Android系统中的SystemService

Android系统中的SystemService

作者: 棒棒0_0 | 来源:发表于2020-06-14 11:58 被阅读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的生命周期

  • 调用带有context的构造函数,用于初始化系统的服务
  • 调用onStart()方法,来启动服务运行,该服务应该在此处调用publishBinderService(String,IBinder)方法来发布其绑定的接口。当然它也可能发布额外的本地接口,系统服务器内的其他服务可以调用这些本地服务来访问其内部
  • 多次调用onBootPhase,直到PHASE_BOOT_COMPLETED被发送,这是最后一次启动阶段的标志。每个阶段都要进行特定的工作。例如获取可选的服务依赖关系、查看是否启动了SafeMode、或者注册一个依赖该服务启动后的服务
  • 所有生命周期的方法都是从系统服务的主循环线程调用的

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进程的整个启动过程

相关文章

网友评论

      本文标题:Android系统中的SystemService

      本文链接:https://www.haomeiwen.com/subject/rmlsohtx.html