状态栏和导航栏的启动
SystemUI 7.0学习笔记一中SERVICES中类的名字就可以大致猜出来它们的功能,对!本节的主角就是com.android.systemui.statusbar.SystemBars.class。
首先看一张图来个全面的把握,
SystemBars的start()会new一个ServiceMonitor对象,接着会调用其start()。
public class SystemBars extends SystemUI implements ServiceMonitor.Callbacks {
......
@Override
public void start() {
if (DEBUG) Log.d(TAG, "start");
mServiceMonitor = new ServiceMonitor(TAG, DEBUG,
mContext, Settings.Secure.BAR_SERVICE_COMPONENT, this);
mServiceMonitor.start(); // will call onNoService if no remote service is found
}
......
}
ServiceMonitor的start()发消息给Handler处理,
public void start() {
......
mHandler.sendEmptyMessage(MSG_START_SERVICE);
}
private final Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch(msg.what) {
case MSG_START_SERVICE:
startService();
break;
......
}
}
};
startService()中mCallbacks.onNoService();的mCallbacks就是创建ServiceMonitor时传入的this(SystemBars)。
private void startService() {
mServiceName = getComponentNameFromSetting();
if (mDebug) Log.d(mTag, "startService mServiceName=" + mServiceName);
if (mServiceName == null) {
mBound = false;
mCallbacks.onNoService();
} else {
long delay = mCallbacks.onServiceStartAttempt();
mHandler.sendEmptyMessageDelayed(MSG_CONTINUE_START_SERVICE, delay);
}
}
回调SystemBars的onNoService()里创建StatusBar,
public class SystemBars extends SystemUI implements ServiceMonitor.Callbacks {
......
@Override
public void