一、本文結構
二、什麼是SystemUI?
作爲Android系統核心應用,SystemUI負責反饋系統及應用狀態並與用戶保持大量的交互。耳熟能詳的三欄:StatusBar(狀態欄)、NavigationBar(導航欄)與Notification Panel(通知欄),以及Recents(近期任務界面),使用起來方便又快捷。
另外Keyguard(鎖屏界面)也是屬於SystemUI的一部分。並且在Android8.0代碼中,Keyguard模塊已經從外部被合併到SystemUI源碼目錄下。
三、SystemUI路徑
與/packages/apps/下許多模塊不同的是,SystemUI屬於Android frameworks的一部分。這也就意味着,SystemUI在正常情況下是不可被替換的(例如,短信應用可以被三方應用替換,Settings因所需權限過高而除外)。
SystemUI 源碼目錄:
/frameworks/base/packages/SystemUI/
SystemUI APK路徑:
/system/priv-app/SystemUI/
四、SystemUI功能劃分
在Android8.0上,我大致將SystemUI模塊分爲11個子模塊,如下圖所示。其中的StackDivider和PipUI是在Android 7.0新加入的模塊。相信很多人都已經體驗過Android 7.0之後的分屏功能。
主要模塊有:
- StatusBar:通知消息提示和狀態展現
- NavigationBar:返回,HOME,Recent
- KeyGuard:鎖屏模塊可以看做單獨的應用,提供基本的手機個人隱私保護
- Recents:近期應用管理,以堆疊棧的形式展現。
- Notification Panel:展示系統或應用通知內容。提供快速系統設置開關。
- VolumeUI:來用展示或控制音量的變化:媒體音量、鈴聲音量與鬧鐘音量
- 截屏界面:長按電源鍵+音量下鍵後截屏,用以展示截取的屏幕照片/內容
- PowerUI:主要處理和Power相關的事件,比如省電模式切換、電池電量變化和開關屏事件等。
- RingtonePlayer:鈴聲播放
- StackDivider:控制管理分屏
- PipUI:提供對於畫中畫模式的管理
重要模塊在系統中的位置截圖如下:
最後
這篇從模塊上,闡述了 SystemUI 的有多少個模塊,每個模塊在什麼具體位置。關於SystemUI的介紹到這裏就結束了,後續會根據模塊進行更爲深入的分析。