现在的位置: 首页 > 综合 > 正文

ICS 系统栏分析(二)

2013年10月30日 ⁄ 综合 ⁄ 共 1638字 ⁄ 字号 评论关闭

系统栏启动流程分析

1.首先SystemServer
ServerThread中创建了管理StatusBar的系统服务,调用addService将服务加入到系统服务表单中。以后就可以通过ServiceManagergetService方法来获取这个服务。

statusBar = new StatusBarManagerService(context, wm);

ServiceManager.addService(Context.STATUS_BAR_SERVICE, statusBar);

2.        
SystemServer
在调用ActivityManagerServicesystemReady方法时,传入了一个runnable参数,runnable执行时地用了startSystemUi()方法

    static final void startSystemUi(Context context) {

        Intent intent = new Intent();

        intent.setComponent(new ComponentName("com.android.systemui",

                    "com.android.systemui.SystemUIService"));

        context.startService(intent);

    }

这个方法启动了SystemUIService服务。

3.        
SystemUIService
启动后调用了onCreate方法

初始化SERVICES[]:

SERVICES[0] = wm.canStatusBarHide()

                    ? R.string.config_statusBarComponent

                    : R.string.config_systemBarComponent;

执行结果:

SERVICES[0]=com.android.systemui.statusbar.phone.PhoneStatusBar

           通过字符串找到这个类

              Class cl = chooseClass(SERVICES[i]);

             
创建一个实例

              mServices[i] = (SystemUI)cl.newInstance();

             
启动PhoneStatusBar

mServices[i].start();

4.        
PhoneStatusBar
start方法中首先调用了其父类StatusBarstart方法,然后将将NavigationBar添加到windowmanager中。PhoneStatusBarPolicy的创建是用来接受敏感事件,刷新状态栏。

super.start();

addNavigationBar();

mIconPolicy = new PhoneStatusBarPolicy(mContext);

5.        
StatusBar
的是一个虚类,大部分方法都是在PhoneStatusBar实现的,但是在StatusBarstart方法中却做了很多工作。

首先调用makeStatusBarView(),初始化了所有的view。如果想详细了解每个部分,就有进相应的view进行分析,在这里不再多说。

然后向StatusBarManagerService注册回调。

mCommandQueue = new CommandQueue(this, iconList);

mBarService.registerStatusBar(mCommandQueue, iconList, notificationKeys, notifications,

                    switches, binders);

 

抱歉!评论已关闭.