Android5 SystemUI 源码自解
由于公司任务修改Android下拉状态栏图标UI,之前没有接触过Android开发,所以修改时废了好长时间。现在将自己的见解总结一下,为了方便自己下次查询。
观看SystemUI源码大概有几大模块:
这里我们可以大致对SystemUI有个全局的认识。之后我们着重看statusbar,因为本次任务重点换图标就是在这里。
本次主要流程如下:
下面进入代码详细介绍:
我们知道学习Android源码一般先看AndroidManifest.xml,这里我们可以知道模块的入口。我们可以发现SystemUIService ,进入源码中发现
@Override
public void onCreate() {
super.onCreate();
((SystemUIApplication) getApplication()).startServicesIfNeeded();
}
引用了SystemUIApplication ,找到此类startServicesIfNeeded()方法
Class<?> cl = SERVICES[i];
if (DEBUG) Log.d(TAG, "loading: " + cl);
try {
mServices[i] = (SystemUI)cl.newInstance();
} catch (IllegalAccessException ex) {
throw new RuntimeException(ex);
} catch (InstantiationException ex) {
throw new RuntimeException(ex);
}
mServices[i].mContext = this;
mServices[i].mComponents = mComponents;
if (DEBUG) Log.d(TAG, "running: " + mServices[i]);
mServices[i].start();
这里启动了SERVICES的所有服务
private final Class<?>[] SERVICES = new Class[] {
com.android.systemui.keyguard.KeyguardViewMediator.class,
com.android.systemui.recent.Recents.class,
com.android.systemui.volume.VolumeUI.class,
com.android.systemui.statusbar.SystemBars.class,
com.android.systemui.usb