Android2.3 statusbar总结

最近看了下,Android statusbar的代码。

整体结构如下:

* 系统statusbarService的启动

1 开机流程中,注册服务:

Slog.i(TAG, "Status Bar");
statusBar = new StatusBarManagerService(context);
ServiceManager.addService(Context.STATUS_BAR_SERVICE, statusBar);

其中,StatusBarManagerService构造函数中,初始化了可显示的icon类别。

mIcons.defineSlots(res.getStringArray(com.android.internal.R.array.config_statusBarIcons));

 

2 然后启动服务:

if (statusBar != null) {
    statusBar.systemReady(); //此处do nothing
}

 

3 然后注册,当activity manager OK时,运行的Applications initial代码。

((ActivityManagerService)ActivityManagerNative.getDefault())
                .systemReady(new Runnable() {
            public void run() {

      ......

      if (statusBarF != null) statusBarF.systemReady2();

      ......

}

 

4 systemReady2() StatusBarManagerService.java

ComponentName cn = ComponentName.unflattenFromString(
    mContext.getString(com.android.internal.R.string.config_statusBarComponent));
Intent intent = new Intent();
intent.setComponent(cn);
Slog.i(TAG, "Starting service: " + cn);
mContext.startService(intent);

com.android.internal.R.string.config_statusBarComponent为“com.android.systemui/com.android.systemui.statusbar.StatusBarService”,即启动com.android.systemui.statusbar.StatusBarService服务。

* 应用StatusbarService的启动

OnCreate中

mCommandQueue = new CommandQueue(this, iconList);
mBarService = IStatusBarService.Stub.asInterface(
        ServiceManager.getService(Context.STATUS_BAR_SERVICE));
try {
        mBarService.registerStatusBar(mCommandQueue, iconList, notificationKeys, notifications);
} catch (RemoteException ex) {
        // If the system process isn't there we're doomed anyway.
}

 

1生成CommandQueue对象,并将StatusbarService中的CommandQueue.Callbacks接口和iconList注册到mCommandQueue

2CommandQueue继承于IStatusBar.Stub。

3registerStatusBar将mCommandQueue注册到"Status Bar"服务,并根据StatusBarManagerService定义的icon类别初始化iconList, notificationKeys, notifications。

于是,"Status Bar"系统服务,就可以通过调用应用程序的StatusbarService中的CommandQueue.Callbacks接口功能。

 

*Statusbar 系列icon显示策略,在StatusBarPolicy中

mIconPolicy = new StatusBarPolicy(this);

 

*

总结,StatusBarManagerService.java是系统服务,就是一个总代理,系统级别。真正的StatusBar显示相关在StatusbarService中,icon显示策略在StatusBarPolicy中。


阅读更多
个人分类: android
上一篇Android StatusBar 更改
下一篇Android statusBar添加back,home,menu按钮
想对作者说点什么? 我来说一句

android 2.3.3源码

2011年09月29日 3.74MB 下载

android2.3源码

2011年09月28日 8.36MB 下载

wpf 状态栏 右下角三角statusbar

2015年09月18日 35KB 下载

StatusBar

2012年01月09日 476KB 下载

改变statusbar的背景总结

2018年01月22日 23.89MB 下载

busybox for android(passed in android 2.3)

2012年05月29日 3.81MB 下载

没有更多推荐了,返回首页

关闭
关闭