SystemUI实现逻辑及对比8.0

xiaoxiao2021-02-28  81

SystemUI实现逻辑


SystemUI中的关键类

BaseStatusBar.java 在android 8.0中该类被去除.5.1中是一个抽象类.它的Start()方法继承自SystemUI,该方法实现状态栏启动的具体步骤. SystemUI.java(抽象类) SystemUi被SystemUIService调用,SystemUiService继承service.所以StatusBar也是一个Service.android 8.0中 SystemUI implements SystemUiServiceProvider CommandQueue.Callbacks BaseStatusBar实现CommanQueue.callbacks接口.CommandQueue继承IStatusBar.Stub远程接口.内部接口 Callbacks (call back on the main thread)IStatusBar.Stub接口的方法通过CommandQueue的Callbacks接口实现.所以BaseStatusBar又是IStatusBar.Stub远程的实现类. 实现抽象类BaseStatusBar.java的两个子类. PhoneStatusBar.javaandroid 8.0中替换类是 StatusBar.java TableStatusBar.java(已去除) 实现SystemUI的类 KeyguardViewMediator.java RingtongPlayer.java VolumeUI.java SystemBars.java PowerUI.java StorageNotification.java

SystemUI启动

SystemUIService是在SystemServer.java中被启动. mActivityManagerService.systemReady(new Runnable() { ~} startSystemUI(context);SystemUIService的onCreate()调用SystemUIApplication的方法启动 SystemUI相关组件, startServicesIfNeeded() , 启动各种Service, 但是它们不是真正的Service, 是继承SystemUI.java这个抽象类, 复写 start()方法.

UI组件启动

通过Handler发 mHandler.sendEmptyMessage消息, 分别调用 了 StartService() 和 continueStartService()两个方法. 然后, 通过回调 – > SystemBars的对象中; – > 调到PhoneStatusBar的start()方法. 同时PhoneStatusBar在 start()方法里面调用父类BaseStatusBar的start(); NavigationBar 和 QuickSettiingPanel初始化后, 添加到UI中;

SystemBars中关键代码: createStatusBarFromConfig() { ... mStatusBar = (BaseStatusBar) cls newInstance(); ... mStatusBar.start(); }

PhoneStatusBar类 start()方法里面调用 addNavigationBar(); – > prepareNavigationBarView(); 最后 – > WindowManager 调用 addView将 NavigationBarView添加到UI界面;

-> Back Home Recent.

PhoneStatusBar类中 prepareNavigationBarView()


Android 8.0SystemUI视觉变化(arm版)

通知栏消息长按可以自定义去设置. 通知消息可以分组管理. 通知栏的功能项减少: 移动数据 勿扰 转屏 省电 飞行 快速设置settings

Android8.0的逻辑变化

目前只是看到: PhoneStatusBar.java 和 BaseStatusBar.java去除.增加StatusBar.java 和 CollapsedStatusBarFragment.java

… 待续

转载请注明原文地址: https://www.6miu.com/read-40490.html

最新回复(0)