最近刚弄玩SystemUI的更改,记录一下,android4.4:
SystemServer(Service) -> SystemUIService(Service) -> SystemBars(class).start() -> SystemBars(class).onNoService -> SystemBars(class).createStatusBarFromConfig() -> PhoneStatusBar(class).start() ->
PhoneStatusBar(class).createAndAddWindows() -> PhoneStatusBar(class).addStatusBarWindow() -> PhoneStatusBar(class).makeStatusBarView()<此处主要是SystemUI的LAYOUT初始化,也是主要操作的地方> ->
mWindowManager.addView(mStatusBarWindow, lp)<将要显示的布局,加载到窗口显示>
启动流程的主框架基本上就是这样的。更改的地方在makeStatusBarView();
2.SystemUI的图标更新流程:(Stsusbar的系统图标更新流程)
首先是图标的初始化:
CommandQueue(class)<此类是系统级服务要更新SystemUI时的binder,也就是说,当系统要更新图标时,就会调用CommandQueue的对应方法> -> BaseStatusBar.Callbacks() -> PhoneStatusBar.Callbacks()<addIcon(),updateIcon
(),removeIcon(),addNotification(),updateNotification()...>
PhoneStatusBarPolicy(class)<此类是实现初始化statusbar系统图标的类,如果要添加默认的图标需要在此处添加> -> StatusBarManager(class系统级的服务,统筹SystemUI的图标显示)
3.SystemUI的布局(status_bar.xml)
更改的地方:将原来的布局设置为隐藏,添加现在需要显示的布局。具体查看代码部分。
4.更改状态栏的高度,显示图标等。
将原来的:@*android:dimen/status_bar_height"替换为:@dimen/add_statusbar_hieght //更改状态栏的高度 <全部替换>
在PhoneStatusBarView.makeStatusBarView()函数中:
将原来的:mIconSize = res.getDimensionPixelSize(com.android.internal.R.dimen.status_bar_icon_size); 替换为:mIconSize = res.getDimensionPixelSize(R.dimen.status_bar_icon_size); //替换ICon尺寸
dimens文件中:
将<dimen name="status_bar_icon_size">@*android:dimen/status_bar_icon_size</dimen>
替换为:
<dimen name="status_bar_icon_size">26px</dimen>
5.添加USB,SD,AUX,DISC图标的显示和刷新。
代码在:PhoneStatusBarView类中添加。