因为项目需要,所以对 Android 源码中的 SystemUI 做了点基本分析。
平台
Android 5.1
源代码路径
/frameworks/base/packages/SystemUI/src/com/android/systemui/
什么是SystemUI
其实就是Android的系统界面,包括状态栏Status Bar,导航栏Navigation Bar,锁屏界面Keyguard,电源界面PowerUI,最近任务管理Recents 等等。
启动流程
SystemServer.java:
1 | public static void main(String[] args){ |
然后我们进入设置启动 systemui 程序的 SystemUIService.java:
1 |
|
SystemUIApplication.java:
1 |
|
// 以 SystemBars 的 start() 为例,所以mService[i].start() 先认为是 SystemBars.start()
SystemBars.java:
1 |
|
PhoneStatusBar.java:
1 |
|
通过 super_status_bar.xml 的分析 SystemBars 的大致视图构成了:
1 | <com.android.systemui.statusbar.phone.StatusBarWindowView> |
status_bar
PhoneStatusBarView 即为手机最上方的状态栏,主要用于显示系统状态,通知等,主要包括 notification icons 和 status bar icons。status_bar.xml 即对应状态栏的视图如下:
1 | <com.android.systemui.statusbar.phone.PhoneStatusBarView android:id="@+id/status_bar"> |
PanelHolder
PanelHolder是用户下拉 status bar 后得到的 view。它主要包含 QuickSettings 和 Notification panel 两个部分。
status_bar_expanded.xml:
1 | <com.android.systemui.statusbar.phone.NotificationPanelView> |