Android的status bar分析

本文详细分析了Android 2.2版本的Status Bar功能,包括Status Icon显示、Notification提示。主要涉及的文件位于frameworks/base/services/java/com/android/server/status。System Server启动时,创建并注册StatusBarService,该服务实现了IStatusBar接口,提供了如activate、deactivate等方法。客户端通过StatusBarManager与StatusBarService交互,StatusBarManager充当了代理角色。文章还提到了Android 2.3.5版本的变化,增加了更多功能,引入了IStatusBarService接口,使得交互更为复杂。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.youkuaiyun.com/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

待续


  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值