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中。


Android状态栏入门

1.先说一下手机和平板代码位置:  com.android.systemui.statusbar.phone  这个是针对手机而需要的status bar com.android.systemui...

android 状态栏(StatusBar)

一、SystemUI 概述         自 android2.2 开始 , 原本存在与 framework-res.apk 中的状态栏和下拉通知栏界面控制被分割出一个单独的 apk文件 , ...
  • jdsjlzx
  • jdsjlzx
  • 2014年03月29日 11:39
  • 20670

Android 2.3 修改 statusbar

Android 2.2 和android 2.3 在源码结构上有一些变化:tatusbar 的位置的变化,2.3中 statusbar 的源码在 frameworks/base/packages/Sy...

android 禁用statusBar demo

  • 2017年08月23日 11:13
  • 211KB
  • 下载

ANDROID STATUSBAR

  • 2014年11月17日 23:03
  • 249KB
  • 下载

编译Android 2.3源码错误总结

虽然版本2.3很老了,但是这是在完全新的Ubuntu上面编译的,可以使我们更加熟练. 1. host C: acp :0:0: warning: "_FORTIFY_SOURCE" redefin...

android 2.3 截屏总结

简单介绍: 截屏一般有三种方法: 1.          直接获取到一个view,然后通过View的Cache来获取一个bitmap对象,然后将bitmap对象写到图像文件。 2.       ...

android 2.3 截屏总结

简单介绍: 截屏一般有三种方法: 1.          直接获取到一个view,然后通过View的Cache来获取一个bitmap对象,然后将bitmap对象写到图像文件。 2.       ...

Android应用:StatusBar状态栏、NavigationBar虚拟按键栏、ActionBar标题栏、Window屏幕内容区域等的宽高

感谢IT大道,copy只为了防止原文被删。原文请看 http://www.itdadao.com/2016/02/07/353404/ 一、屏幕中各种栏目以及屏幕的尺寸       当我们...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android2.3 statusbar总结
举报原因:
原因补充:

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