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

Android的status bar分析

2018年02月10日 ⁄ 综合 ⁄ 共 1892字 ⁄ 字号 评论关闭

Status bar是launcher主界面上面提示当前状态(电池,网络,蓝牙等等)的一个栏。
本文以它的功能为框架进行分析(android 2.2)。

一. 功能概述
1. Status icon显示 
2. Notification(比如有短信时,会在上面提示)

二. 主要涉及文件
主体文件在frameworks/base/services/java/com/android/server/status下

 

三. 主要功能描述
  system server启动时,new 一个statusbarService,并在service manager中注册。
  statusbarservice继承自Istatusbar,其主要methods为
interface IStatusBar
{
    void activate();
    void deactivate();
    void toggle();
    void disable(int what, IBinder token, String pkg);
    IBinder addIcon(String slot, String iconPackage, int iconId, int iconLevel);
    void updateIcon(IBinder key, String slot, String iconPackage, int iconId, int iconLevel);
    void removeIcon(IBinder key);
}

而客户端则借助于statusbarmanager(frameworks/base/core/java/android/app)对statusbar进行访问。不过statusbarmanger没有继承自Istatusbar,其实现的methods为
disable, collapse(实际为service中的deactivate), expand(实际是service中的activate), toggle,addicon, updateicon, removeicon。所以statusbarmanager确实完成了一般的proxy的任务

有几篇文章写得不错
http://blog.csdn.net/stonecao/article/details/6642727

------------------------------------------------------------------以下是2.35版本上的分析-------------------------------------------------------

2.3.5与2.2的status bar差别巨大,新加了很多东西。

有两个interface,分别为Istatusbar和IstatusbarService。 Systemserver会首先new一个继承自Istatusbarservice.stub的statusbarManagerService,这个东东在systemready2中会启动statusbarservice。而statusbarservice会向statusbarmanagerservice注册它自身,这样manager就能用到其功能。statusbarservice继承于service,因此会有onCreate,
onBind等等service特性,并且实现了Commandqueue.callbacks。而它自身又持有commandqueue实例,commandqueue其实又继承Istatusbar.stub 。。。是不是晕了。。。有好心人画张关系图给我哈,懒得搞了。。。
在statusbarservice的oncreate中,有makeStatusbarView生成整个statusbar框架,最后调用new statusbarpolicy进行初始icon的绘制。
首先会通过context.getSystemService(在contextimpl中实现)new一个statusbarmanager实例(又一个新名字。。。我只能说,shit,谷歌你命名太乱了),这个东东其实就是给statusbarmanagerservice包了一层(在new时通过servicemanager获得binder,并asInterface)

可以显示的图标定义: frameworks/base/core/res/res/values/config.xml
status bar的高度字体:frameworks/base/core/res/res/values/dimens.xml

待续

抱歉!评论已关闭.