android8.0之SystemUI分析(一)

本文详细探讨了Android 8.0中的SystemUI,包括其组成、实现过程,重点关注了StatusBar的启动和加载。SystemUI由多个组件构成,如Status Bar、Navigation Bar、QuickSettings等。在启动过程中,SystemUIService是关键,它从SystemServer启动,并通过SystemUIApplication启动一系列SystemUI服务。在7.0及更高版本中,SystemBar的启动加载逻辑有所改变,涉及StatusBarService和StatusBarManagerService的角色交互。
摘要由CSDN通过智能技术生成

SystemUI是指“系统UI”,SystemUI是以应用程序的形式提供系统UI界面的统一管理方案,它是一个标准的APK。

本文将比较全面的介绍SystemUI的组成,实现,布局以及客制化方案等等。本博文基于android8.0源码进行分析,由于android8.0相比以前的版本SystemUI部分改动是非常大的。

一、SystemUI组成

SystemUI包含的功能非常丰富,组成元素主要包含常见的System Bars,以及ScreenShot截屏、壁纸、最近运行的应用程序等。SystemUI也是各大安卓版本中变化比较大的一个部分。

  • Status Bar
  • Navigation Bar
  • Combined Bar (主要为Tablet设备使用)
  • Notifications
  • LockScreen
  • Recent (最近任务)
  • QuickSettings
  • 等等
二、SystemUI实现

了解了SystemUI后,本文先来大概讲解下StatusBar的实现流程。

1、应用启动相关代码

相关代码主要分为两个部分
1)、Service部分
代码路径:framework/base/services/java/com/android/server
2) 、应用部分
代码路径:framework/base/packages/SystemUI

SystemUI中SystemUIService是整个系统UI比较重要的载体,所以我们的分析将从SystemUIService开始,而SystemUIService是从SystemServer中启动的。关于这部分这里不做多的分析,详见SystemServer.java中的startSystemUi()方法。下面来看一下SystemUIServer中的onCreate()方法。

/*framework/base/packages/systemui/src/com/android/systemui/SystemUIService.java*/
    @Override
    public void onCreate() {
        super.onCreate();
        ((SystemUIApplication) getApplication()).startServicesIfNeeded();

        // For debugging RescueParty
        if (Build.IS_DEBUGGABLE && SystemProperties.getBoolean("debug.crash_sysui", false)) {
            throw new RuntimeException();
        }
    }

上面的代码可以看出SystemUIService中实际有效代码只是实例化了一个SystemUIApplication对象,并且调用了startServiceIfNeeded()方法。下面来看SystemUIApplication中的具体实现逻辑。

    public void startServicesIfNeeded() {
        startServicesIfNeeded(SERVICES);
    }

其中SERVICES是一组所有用户共用的SystemUI服务,如下:

    /**
     * The classes of the stuff to start.
     */
    private final Class<?>[] SERVICES = new Class[] {
            Dependency.class,
            NotificationChannels.class,      
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值