android StatuBar源码实现解析

Statusbar 的功能作用
状态栏主要用来显示一些系统图标,应用的通知图标和系统时间。Statusbar模块就是控制和管理着这些图标,以及通知信息的显示和一些系统开关的。
Ⅰ、状态栏的通知功能(包括时间,通知,系统状态等)
状态栏与Toast 都可以起到通知、提醒的作用。但它们的实现原理和表现形式却完全不一样。Toast 其实相当于一个Widget 组件,有些类似于没有按钮的对话框。而Statusbar 可与系统其它应用进行交互来显示在屏幕上方状态栏中的信息,并且Statusbar 还可通过图标的显示变化来反应一些系统状态的变换,如电池电量,wifi ,系统音量,闹钟等。状态栏是一种让你的应用程序或系统信息变化在不使用Activity的情况下给用户的提醒和通知。
Ⅱ、状态栏的日期显示
状态栏也会显示系统时间,当前日期也会在状态栏显示,只是在默认情况下日期是隐藏的,只有在点击状态栏时才会显示。

模块说明:
1.StatusbarService(StatusBarManagerService类):Statusbar内部各种交互以及模块与其他应用的交互都是建立在StatusbarService之上的,其中包括Statusbar视图的创建(包括Statusbar、TrackingView和StatusbarExpandedView),视图动画,系统图标(闹钟、wifi、SIM卡等)的加载和管理,其他应用通知信息的加载显示、更新、删除等,其他应用的远程接口控制(如当打电话时statusbar处于禁用状态的)对Android系统其他应用的通知信息(包括图标、tracker、notification的布局等)的处理。SIM卡信息的控制等。
2.StatusBarPolicy.java :主要负责状态栏显示策略的管理(如状态栏的图标什么时候显示,在什么位置显示等)。StatusBarPolicy 的构造函数中初始化了很多系统图标(如电池信息图标,闹钟图标,声音图标,信号栏图标等)。 。  默认时有很多图标是不显示的,需要显示时再进行更新。


重要文件的介绍
StatusBarManagerService.java
StatusBarManagerService是服务端StatusBarService的管理者
顾名思义,StatusBarManagerService是StatusBarService的管理者,是StatusBarService与外界通信的桥梁,如4.2所讲。
在StatusBarManagerService.java中,有 addNotification,removeNotification,updateNotification等方法用于管理传递给他的通知对象。这个类是一些管理方法,实际执行相关动作的是在IStatusBar.java里面,这个是framework/base/core/java/com /android/internal/statusbar/IStatusBar.aidl自动生成的用于IPC的类。
表5.1
StatusBarService.java
StatusBarservice 是Statusbar的核心
StatusBarService这个服务是Statusbar模块的中心点,所有关于图标的加载、更新、删除等处理,与应用的交互,对通知信息的处理,动画的完成等都是建立在StatusBarService这个基础之上的。
表5.2
StatusBarPolicy.java
StatusBarPolicy负责状态栏显示的策略管理
Android中状态栏上有很多图标,这些图标什么时候显示什么时候不显示,这些都是StatusBarPolicy来管理的。
StatusBarPolicy的构造函数里初始化了好几个图标,如闹钟icon,信号栏icon等。默认时有很多图标是不显示的,需要显示时再进行更新。StatusBarPolicy调用 registerReceiver注册了感兴趣的intent,当感兴趣的intent发生时,对图标进行更新。
StatusBarPolicy只是一个策略管理,实际的功能是StatusBarService来实现的。StatusBarService初始化时初始化了一个用于显示statusbar 的StatusBarView。StatusBarView里面定义了icon名字,的显示顺序,对应的png图等,在StatusBarService调用makeStatusBarView方法时实现statusbar的初始化。
表5.3
CommandQueue.java
CommandQueue是StatusBarservice和StatusBarManagerService交互的枢纽
IStatusBar.java里面对应的方法是用CommandQueue 的接口callback的形式调用的,callback的实现在对应的服务提供类也就是StatusBarService.java中提供的。
最终执行状态栏更新通知等事件都是在实现的CommandQueue.Callbacks里面执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值