Framework层SystemService类的详细介绍

  • Post author:
  • Post category:其他


framework层中系统服务要么直接extend SystemService,要么创建静态内部类Lifcycle extends SystemService,接下来详细介绍下SystemService类,千万不要和SystemServer类搞混了。


SystemService是frameworks/base/services/core/java/com/android/server/SystemService.java。



目录


一、SystemService概述


二、成员函数


1. onStart()


2. onBootPhase(int phase)


3. publishBinderService(String name, IBinder service)


4. getBinderService(String name)


5. publishLocalService(Class type, T service)


6. getLocalService(Class type)


7. boolean isSafeMode()


一、SystemService概述

它是运行在系统进程中的service的基类,根据需要override和implement生命周期事件回调方法。

SystemService的生命周期方法如下:下边的方法都是由system service的主线程调用。


1.构造函数

用来提供初始化系统service;


2.onStart()

调用该方法启动service。在onStart()中应该调用


publicBinderService(String,IBinder),


把该service公开,这样其他service或者apps可以访问到它。


3.onBootPhase(int)

在收到PHASE_BOOT_COMPLETED的boot phase之前,该方法被调用的次数和引导阶段的次数一样多。每个阶段都是执行特定work,像获取可选的服务依赖,等待查看SafeMode是否使能,或者注册一个该服务之后启动的service。

Android 12支持的Boot_Phase包含7种,分别为




(1) public static final int PHASE_WAIT_FOR_DEFAULT_DISPLAY = 100;



当onBootPhase(int) 回调的参数为100时,该boot_phase是系统在on boot时发给系统服务的最早的boot_phase。


(2) public static final int PHASE_LOCK_SETTINGS_READY = 480;


当onBootPhase(int) 回调的参数为480时,该boot_phase表示service可以获取锁定settings数据。




(3) public static final int PHASE_SYSTEM_SERVICES_READY = 500;



收到这个启动阶段后,service可以安全地调用核心的系统服务,例如PowerManager、PackageManager等。


(4) public static final int PHASE_DEVICE_SPECIFIC_SERVICES_READY = 520;



收到这个启动阶段后,service


可以调用


device的特殊服务


(5) public static final int PHASE_ACTIVITY_MANAGER_READY = 550;


收到这个启动阶段后,service可以广播intents。


(6) public static final int PHASE_THIRD_PARTY_APPS_CAN_START = 600;


收到这个启动阶段后,service可以start/bind第三方App。


(7) public static final int PHASE_BOOT_COMPLETED = 1000;


收到这个启动阶段,意味着启动已经完成,home application已经启动。系统services可以使用该阶段来降低总体延迟,这个回调和注册

ACTION_LOCKED_BOOT_COMPLETED广播是一样的。


二、成员函数


1. onStart()

public abstract void onStart(),抽象方法,extends SystemService的类必须实现该方法,并在该方法中调用publishBinderService()。


2.

onBootPhase(int phase)

public void onBootPhase(int phase){},它是一个空方法。boot进程的每个阶段都会调用该方法,可以根据参数phase做相应的work。


3. publishBinderService(String name, IBinder service)

protected final void publishBinderService(String name, IBinder service),公开该service,这样其他services和apps就可以访问到它。

该方法实际上是调用ServiceManager.addService(name, service allowIsolated, dumpPriority)。

4. getBinderService(String name)

protected final IBinder getBinderService(String name),根据name获取binder service。

该方法实际上是调用ServiceManager.getService(name)。

5. publishLocalService(Class<T> type, T service)

该方法实际上是调用LocalService.addService(type, service)。

6. getLocalService(Class<T> type)

该方法实际上是调用LocalService.getService(type)。

7. boolean isSafeMode()

返回SystemServiceManager的isSafeMode()的状态。



版权声明:本文为lvyaer_1122原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。