Android2.3 statusbar总结

原创 2012年03月23日 17:42:41

最近看了下,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中。


Android2.3 statusbar总结

http://www.cnblogs.com/hoji-real/archive/2011/11/15/2249696.html
  • jdsjlzx
  • jdsjlzx
  • 2013年09月27日 16:09
  • 592

android2.3 FrameWork对StatusBar处理流程

android2.3 以后对StatusBar的处理从以前的framework抽出成了app,放在  framework/base/packages/SystemUI下关系到的代码有,如下:1,fra...
  • superman5054
  • superman5054
  • 2011年07月18日 17:45
  • 901

Android2.3.1系统源码编译

1. 环境准备:         Ubuntu14.04,编译安卓源码只能在Linux上面,建议使用64位电脑进行编译                 Java环境,需要使用Oracle的JDK, ...
  • Linjingke32
  • Linjingke32
  • 2017年09月05日 00:20
  • 221

Android Switch控件(在android2.2 api8及以上使用)

IOS有一种UISwitch控件,只有两个状态:on,off。如图所示 在Android4.0中也添加了一个类似的控件:Switch.如图所示   ...
  • caoshichao520326
  • caoshichao520326
  • 2013年11月06日 16:55
  • 2097

android 2.3 wifi (二)

7.       Ad hoc的支持 添加ad hoc的支持有两种方式,改wpa_supplicant和改Android Framework。 改wpa_supplicant的原理和方法请参考htt...
  • z642010820
  • z642010820
  • 2012年03月11日 11:07
  • 11715

VM Ubuntu14.04 64位 编译Android2.3.5源码

Android2.3.5源码 下载 http://blog.csdn.net/ilittleone/article/details/6823441。非常感谢无私的提供。 JAVA安装配置 先去 O...
  • a3676212
  • a3676212
  • 2015年01月12日 12:27
  • 1660

在Android 2.3中如何使用native_activity.h编写本地应用

本文描述在Android 2.3系统中利用NDK完成native activity的开发步骤。
  • caowenbin
  • caowenbin
  • 2010年12月07日 15:51
  • 7528

Qt--风格化statusBar

//使用label在statusbar显示提示信息 msgLabel = new QLabel; msgLabel->setMinimumSize(msgLabel->sizeHi...
  • abby_sheen
  • abby_sheen
  • 2012年03月16日 11:23
  • 2440

android StatusBar和NavigationBar分析

android StatusBar和NavigationBar分析 整理的比较乱,希望有所帮助。 1. StatusBar和NavigationBar是什么 StatusBar是手机...
  • aliqing777
  • aliqing777
  • 2015年12月21日 14:12
  • 733

android 2.3源码下载

参考这篇博客   http://blog.csdn.net/gexueyuan/article/details/7772387 系统:Ubuntu 12.04(不是虚拟机安装) 网速2M的话,连续下载...
  • hhbgk
  • hhbgk
  • 2013年03月27日 22:21
  • 3249
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android2.3 statusbar总结
举报原因:
原因补充:

(最多只允许输入30个字)