ICS 系统栏分析(二)

系统栏启动流程分析

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.         PhoneStatusBarstart方法中首先调用了其父类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);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值