Android系统应用---SystemUI之二:Statusbar显示流程以及系统状态图标更新分析

StatusBar概述

状态栏主要用来显示一些系统图标,应用的通知图标和系统时间。Statusbar模块就是控制和管理着这些图标,以及通知信息的显示和一些系统开关的。状态栏在Android手机中位于屏幕的最上方,通常在各种应用的最上方都会显示。

当SystemUI和Status Bar创建完成,就通过makeStatusBarView()进行布局的加载和界面的显示。

状态栏的视图效果如下图:


如图所示,状态栏分为通知图标区域,状态图标区域,信号电量组合区域和时钟区域

●通知区域显示系统发出notification的ticker,有图标和文字的简短显示

●状态图标区域显示系统设备的当前状态,例如打开了WIFI,蓝牙,GPS后,此区域都会显示相对应的图标。上图是打开的静音和闹钟图标。

●信号组合区域显示信号变化状态,当信号发生变化后此处图标都会进行相应更新。

●电量显示区域显示电量的变化状态

●时钟区域按指定格式显示系统的当前时间。

StatusBar 实现原理:

 

               

 

从类图中我们可以看到几个重要的类和方法

BaseStatusBar:状态栏核心类,是一个抽象类,它的start方法定义了状态栏启动时的具体步骤,负责绑定远程代理接口以及管理窗口。

PhoneStatusBar:手机状态栏的具体实现类

PhoneStatusBarPolicy:定义了系统通知图标的设置策略,监听图标改变广播

CommandQueue:继承自IStatusBar.stub远程接口,继承自IStatusBar.Stub,是IStatusBar的服务端,是IStatusBarService与BaseStatusBar进行通信的桥梁。

 

实现的关键步骤:

1.      获取StatusBarManagerService 的实例,获取一端连接

StatusBarManagerService是运行于SystemServer的一个系统服务。并由ServiceManager管理,它比StatusBar创建的早,继承IStatusBarService.Stub,它接受用户操作状态栏的请求并将其转发给BaseStatusBar。为了保证SystemUI 意外退出后不会发生信息丢失,保存了所有需要状态栏与导航栏进行显示或处理的信息副本。StatusBarManagerService 为那些对状态栏感兴趣的其他系统服务定义了一系列接口,对SystemUI而言,它是一个客户端,因为framework收到请求后,StatusBarManagerService 会将用户操作状态栏的请求发送给SystemUI,并由后者完成响应 。

 

        mBarService = IStatusBarService.Stub.asInterface(

               ServiceManager.getService(Context.STATUS_BAR_SERVICE));

 

2.将一个继承自IStatusBar.Stub的CommandQueue的实例注册到IStatusBarService以建立通信,并将信息副本取回,实现双向连接。registerStatusBar()保存BaseStatusBar中的CommandQueue的Bp端到mBar成员之中,然后再把信息副本填充到参数里去。StatusBarManagerService将通过mBar与BaseStatusBar进行通信。

        mCommandQueue = new CommandQueue(this, iconList);

        try {

            mBarService.registerStatusBar(mCommandQueue,iconList, notificationKeys, notifications,

                    switches, binders

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值