文章目录

  • 1. SystemUI的架构图
  • 2. 对我的架构图的解释
    • 2.1 为什么要将SystemUIService和SystemUIApplication放在一层?
    • 2.2 抽象服务层
    • 2.3 功能层

这篇文章还是在于一位前辈的交流过程中汲取到的,之前也有看网上的关于SystemUI的内容,但是都没有从架构角度去琢磨SystemUI,我一位SystemUI小白就先在这里班门弄斧了,希望各位看官们抱着批评的态度去读文章,也希望能够把我认知的错误指点出来。

1. SystemUI的架构图

这里的这个架构图与以往的不同,我是从程序耦合关联的紧密程度的角度上去看SystemUI的。

可以通过StatusBarManagerService跨进程调用SystemUI里面的服务,其主要桥梁就是CommandQueue,关于CommandQueue.Callbcks的类图:

2. 对我的架构图的解释

2.1 为什么要将SystemUIService和SystemUIApplication放在一层?

我是这样考虑的,在AMSonSystemReady中启动了SystemUIService,同时又调用了startServicesIfNeeded,但是SystemUIApplication中要启动的这些抽象服务,相对于SystemUIApplication这个类来讲,它是完全不知道有哪些服务的,因为这些服务是从string-array中获取的,然后通过反射来调用执行的。

也就是说,如果我要实现一个与Android原生的SystemUI完全不同的SystemUI,我只需要将这个string-array的内容修改掉,改成我们定制的SystemUI具有的一个抽象服务。比如我们的Android系统是给盲人用到,那么我们定制的SystemUI完全可以没有Keyguard(锁屏)、SystemBars(系统栏)…,我们的SystemUI完全可以只有一个语音服务(VoiceAssist),由接受音频信息作为输入,发出音频内容作为输出。

这一层的作用其实就是保证进程中只有一个SystemUIService

2.2 抽象服务层

在架构图中我将SystemUI单独分出一个抽象服务层,是因为这些服务是由SystemUIApplication启动起来的,但是这些类又不是真正的服务,它们继承的是抽象类SystemUI,而SystemUI则是实现了一个接口SysUiServiceProvider,里面有两个方法,是参数不同的同名方法getComponent,这里看就有点类似于工厂模式了,因为getComponent获取的其实传入的Class参数对应的对象。

这一层则是提供了SystemUI关键功能,都是伴随着SystemUIService的启动而运行起来的,但是它们又具有各不相同的功能,对外就像是一个服务。

2.3 功能层

这一层很简单明了,就是对外提供SystemUI的一些实际功能。

  1. 当按下了电源键和音量下键之后,就会通过层层调用,使用到处于SystemUI内部的TakeScreenShotService来实现一个截图功能;
  2. 当插入sim卡之后,手机网络状态变化,StatusBarWindowView就会根据当前的网络状态来刷新当前状态栏上的一个现实效果;

当然还有很多功能,如音量调节Dialog的展示、下拉快捷开关、通知的展示、分屏、画中画等。

分出这一层是为了与抽象服务层做区分,因为我觉得有了抽象服务层提供的支持,这一层的功能才能够实现。

[深入SystemUI]-了解SystemUI的大致架构相关推荐

  1. SpringCloud大致架构

    SpringCloud大致架构

  2. Android 4.0 ICS SystemUI浅析——SystemUI启动流程

    阅读Android 4.0源码也有一段时间了,这次是针对SystemUI的一个学习过程.本文只是对SystemUI分析的一个开始--启动流程的分析,网上有很多关于2.3的SystemUI的分析,可4. ...

  3. SystemUI架构设计

    目录 1.什么是SystemUI 2.SystemUI的模块划分 3.SystemUI架构图 SystemUI结构图 SystemUI类图 SystemUI启动流程 4.通知 通知所在的位置 通知的注 ...

  4. SystemUI介绍

    1.启动流程 SystemUI启动是在SystemServer进程之后启动的,android系统启动流程依次是: 从Boot RAM->BootLoader->Kenel->Init ...

  5. Android 4.0 ICS SystemUI浅析——StatusBar加载流程分析

    前面两篇文章< Android 4.0 ICS SystemUI浅析--SystemUI启动流程>.< Android 4.0 ICS SystemUI浅析--StatusBar结构 ...

  6. android 6.0 SystemUI源码分析(1)-SystemUI介绍

    1. SystemUI介绍 SystemUI是一个系统应用,主要功能有: 1)状态栏信息显示,比如电池,wifi信号,3G/4G等icon显示 2)通知面板,比如系统消息,第三方应用消息,都是在通知面 ...

  7. android 9.0新ui,SystemUI分析(Android9.0)

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 一.SystemUI组成 SystemUI是Android的系统界面,包括状态栏statusbar.锁屏keyboard ...

  8. Android 4.0 ICS SystemUI浅析——StatusBar结构分析

    在上一篇文章<Android 4.0 ICS SystemUI浅析--SystemUI启动流程>中以及提到了SystemUI的组成,本文主要分析其中的StatusBar结构. 1.布局概览 ...

  9. android /system,Android中SystemUI解析

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 还未完成,待继续补充. Android8.1.0 SystemUI代码统计如下:1 2 3 4 5 6 7 8 9 10 ...

最新文章

  1. 多线程真的会使用CPU所有的内核吗?
  2. 美国12大科技公司如何参与自动驾驶?
  3. HDU 4708 Rotation Lock Puzzle(模拟)
  4. Oracle 11g Dataguard 物理备库配置(四)之broker snapshot standby测试
  5. C.【转】C语言字符串与数字相互转换
  6. java访问权限 public private protected
  7. 关闭edge任务栏预览_如何在Microsoft Edge中关闭选项卡预览
  8. Flink学习笔记:搭建Flink on Yarn环境并运行Flink应用
  9. 计算机naf类型是什么,计算机系统结构课后习题答案
  10. VMware虚拟机Bridged(桥接模式)
  11. 简洁的 HTML5 音乐播放器
  12. 《第一行代码》学习笔记12-UI(1)
  13. 看完不后悔系列,SQL语句执行慢怎么办,原因总结!!
  14. 位图图像和矢量图形的区别
  15. 免费开源FTP工具:Cyberduck for Mac
  16. 测试一下Pinia,Vuex 要出局了?
  17. 【CrackMe 实战】逆向破解实战之 001 Acid burn.exe
  18. linux 磁盘整理命令,Ubuntu磁盘整理命令汇总
  19. Linux TCP之sack(一)
  20. Windows 10/11 官方下载工具 镜像制作U盘启动盘 快速安装

热门文章

  1. UOS系统无线网络手动关闭后无法恢复解决办法
  2. 02-Node.js基础(一)
  3. 三.非协议栈实现BLE蓝牙广播(2.4G实现BLE广播)
  4. 【转】Go语言和Windows服务
  5. win7 计算机不显示u盘重装系统,u盘重装系统win7步骤和详细教程
  6. 《毛毛虫团队》第五次作业:团队项目需求改进与系统设计
  7. linux硬盘对拷后不能启动,变动硬盘位置或dd对拷更换硬盘后系统无法正常启动的解决方法...
  8. 一个爬虫的五脏六腑(从入门到入狱)
  9. WPF常用UI库和图标库(MahApps、HandyControl、LiveCharts)
  10. 新手必学:利用电影贴吧引流轻松变现