Framework层SystemService类的详细介绍

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()的状态。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值