[深入SystemUI]-了解SystemUI的大致架构
文章目录
- 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放在一层?
我是这样考虑的,在AMS
的onSystemReady
中启动了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
的一些实际功能。
- 当按下了电源键和音量下键之后,就会通过层层调用,使用到处于
SystemUI
内部的TakeScreenShotService
来实现一个截图功能; - 当插入sim卡之后,手机网络状态变化,
StatusBarWindowView
就会根据当前的网络状态来刷新当前状态栏上的一个现实效果;
当然还有很多功能,如音量调节Dialog的展示、下拉快捷开关、通知的展示、分屏、画中画等。
分出这一层是为了与抽象服务层做区分,因为我觉得有了抽象服务层提供的支持,这一层的功能才能够实现。
[深入SystemUI]-了解SystemUI的大致架构相关推荐
- SpringCloud大致架构
SpringCloud大致架构
- Android 4.0 ICS SystemUI浅析——SystemUI启动流程
阅读Android 4.0源码也有一段时间了,这次是针对SystemUI的一个学习过程.本文只是对SystemUI分析的一个开始--启动流程的分析,网上有很多关于2.3的SystemUI的分析,可4. ...
- SystemUI架构设计
目录 1.什么是SystemUI 2.SystemUI的模块划分 3.SystemUI架构图 SystemUI结构图 SystemUI类图 SystemUI启动流程 4.通知 通知所在的位置 通知的注 ...
- SystemUI介绍
1.启动流程 SystemUI启动是在SystemServer进程之后启动的,android系统启动流程依次是: 从Boot RAM->BootLoader->Kenel->Init ...
- Android 4.0 ICS SystemUI浅析——StatusBar加载流程分析
前面两篇文章< Android 4.0 ICS SystemUI浅析--SystemUI启动流程>.< Android 4.0 ICS SystemUI浅析--StatusBar结构 ...
- android 6.0 SystemUI源码分析(1)-SystemUI介绍
1. SystemUI介绍 SystemUI是一个系统应用,主要功能有: 1)状态栏信息显示,比如电池,wifi信号,3G/4G等icon显示 2)通知面板,比如系统消息,第三方应用消息,都是在通知面 ...
- android 9.0新ui,SystemUI分析(Android9.0)
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 一.SystemUI组成 SystemUI是Android的系统界面,包括状态栏statusbar.锁屏keyboard ...
- Android 4.0 ICS SystemUI浅析——StatusBar结构分析
在上一篇文章<Android 4.0 ICS SystemUI浅析--SystemUI启动流程>中以及提到了SystemUI的组成,本文主要分析其中的StatusBar结构. 1.布局概览 ...
- android /system,Android中SystemUI解析
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 还未完成,待继续补充. Android8.1.0 SystemUI代码统计如下:1 2 3 4 5 6 7 8 9 10 ...
最新文章
- 多线程真的会使用CPU所有的内核吗?
- 美国12大科技公司如何参与自动驾驶?
- HDU 4708 Rotation Lock Puzzle(模拟)
- Oracle 11g Dataguard 物理备库配置(四)之broker snapshot standby测试
- C.【转】C语言字符串与数字相互转换
- java访问权限 public private protected
- 关闭edge任务栏预览_如何在Microsoft Edge中关闭选项卡预览
- Flink学习笔记:搭建Flink on Yarn环境并运行Flink应用
- 计算机naf类型是什么,计算机系统结构课后习题答案
- VMware虚拟机Bridged(桥接模式)
- 简洁的 HTML5 音乐播放器
- 《第一行代码》学习笔记12-UI(1)
- 看完不后悔系列,SQL语句执行慢怎么办,原因总结!!
- 位图图像和矢量图形的区别
- 免费开源FTP工具:Cyberduck for Mac
- 测试一下Pinia,Vuex 要出局了?
- 【CrackMe 实战】逆向破解实战之 001 Acid burn.exe
- linux 磁盘整理命令,Ubuntu磁盘整理命令汇总
- Linux TCP之sack(一)
- Windows 10/11 官方下载工具 镜像制作U盘启动盘 快速安装
热门文章
- UOS系统无线网络手动关闭后无法恢复解决办法
- 02-Node.js基础(一)
- 三.非协议栈实现BLE蓝牙广播(2.4G实现BLE广播)
- 【转】Go语言和Windows服务
- win7 计算机不显示u盘重装系统,u盘重装系统win7步骤和详细教程
- 《毛毛虫团队》第五次作业:团队项目需求改进与系统设计
- linux硬盘对拷后不能启动,变动硬盘位置或dd对拷更换硬盘后系统无法正常启动的解决方法...
- 一个爬虫的五脏六腑(从入门到入狱)
- WPF常用UI库和图标库(MahApps、HandyControl、LiveCharts)
- 新手必学:利用电影贴吧引流轻松变现