Android SystemBar启动流程分析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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();

}

相关文档
最新文档