Android SystemBar启动流程分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Android SystemBar启动流程分析
SystemBars的服务被start时,最终会调用该类的onNoService()方法。
@Override
public void start() {
if (DEBUG) Log.d(TAG, "start");
ServiceMonitor mServiceMonitor = new ServiceMonitor(TAG, DEBUG,
mContext, Settings.Secure.BAR_SERVICE_COMPONENT, this);
mServiceMonitor.start(); // will call onNoService if no remote service is found }
@Override
public void onNoService() {
if (DEBUG) Log.d(TAG, "onNoService");
createStatusBarFromConfig(); // fallback to using an in-process implementation }
private void createStatusBarFromConfig() {
…
mStatusBar = (BaseStatusBar) cls.newInstance();
…
mStatusBar.start();
}
BaseStatusBar是一个抽象类,故调用其子类的PhoneStatusBar的start 函数。
@Override
public void start() {
…
super.start();
…
}
子类的start又调用了父类的start
public void start() {
…
createAndAddWindows();
…
}
protected abstract void createAndAddWindows();
父类的start调用了一个createAndAddWindows()方法,此方法是抽象方法,最终调用的还是PhoneStatusBar的createAndAddWindows方法。
@Override
public void createAndAddWindows() {
addStatusBarWindow();
}
调用addStatusBarWindow()方法
private void addStatusBarWindow() {
makeStatusBarView();
mStatusBarWindowManager = new StatusBarWindowManager(mContext);
mRemoteInputController = new RemoteInputController(mStatusBarWindowManager);
mStatusBarWindowManager.add(mStatusBarWindow, getStatusBarHeight());
}
调用makeStatusBarView();方法,该方法调用后会生成信号栏的view,并且为这些信号的显示添加相应的控制对象。在这里,创建了mMSimNetworkController对象。
PhoneStatusBarView makeStatusBarView() {
…
mMSimNetworkController = new MSimNetworkControllerImpl(mContext, mSignalThread.getLooper());
…
}
在MSimNetworkControllerImpl类的构造函数中,初始化了卡、信号以及数据的状态,并注册了状态变化的监听。
public MSimNetworkControllerImpl(Context context, Looper bgLooper) {
super(context, bgLooper);
initUIState();
mBackgroundHandler.post(new Runnable() {
@Override
public void run() {
registerPhoneStateListener(mContext);
}
});
registerBroadcastReceive(context);
resetVoLTEStateChangeObserver();
resetTurAccShowStateChangeObserver();
resetSimCardActiveStateChangeObserver();
resetAirplaneChangeObserver();
}