android StatuBar源码实现解析
Posted JonsonWei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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里面执行。
|
以上是关于android StatuBar源码实现解析的主要内容,如果未能解决你的问题,请参考以下文章
android源码解析之-->异步任务AsyncTask
Android源码博文集锦1
Android源码博文集锦3
Android高级UI开源框架进阶解密附Loading图表菜单日历图片文本弹窗悬浮窗状态栏导航布局等经典框架源码解析
Android源码解析RPC系列(一)---Binder原理
Android P JobScheduler服务源码解析 ——框架解析