Android2.3 statusbar总结
最近看了下,Android statusbar的代码。
整体结构如下:
* 系统statusbarService的启动
1 开机流程中,注册服务:
Slog.i(TAG, "Status Bar");
statusBar = new StatusBarManagerService(context);
ServiceManager.addService(Context.STATUS_BAR_SERVICE, statusBar);
其中,StatusBarManagerService构造函数中,初始化了可显示的icon类别。
mIcons.defineSlots(res.getStringArray(com.android.internal.R.array.config_statusBarIcons));
2 然后启动服务:
if (statusBar != null) {
statusBar.systemReady(); //此处do nothing
}
3 然后注册,当activity manager OK时,运行的Applications initial代码。
((ActivityManagerService)ActivityManagerNative.getDefault())
.systemReady(new Runnable() {
public void run() {
......
if (statusBarF != null) statusBarF.systemReady2();
......
}
4 systemReady2() StatusBarManagerService.java
ComponentName cn = ComponentName.unflattenFromString(
mContext.getString(com.android.internal.R.string.config_statusBarComponent));
Intent intent = new Intent();
intent.setComponent(cn);
Slog.i(TAG, "Starting service: " + cn);
mContext.startService(intent);
com.android.internal.R.string.config_statusBarComponent为“com.android.systemui/com.android.systemui.statusbar.StatusBarService”,即启动com.android.systemui.statusbar.StatusBarService服务。
* 应用StatusbarService的启动
OnCreate中
mCommandQueue = new CommandQueue(this, iconList);
mBarService = IStatusBarService.Stub.asInterface(
ServiceManager.getService(Context.STATUS_BAR_SERVICE));
try {
mBarService.registerStatusBar(mCommandQueue, iconList, notificationKeys, notifications);
} catch (RemoteException ex) {
// If the system process isn't there we're doomed anyway.
}
1生成CommandQueue对象,并将StatusbarService中的CommandQueue.Callbacks接口和iconList注册到mCommandQueue
2CommandQueue继承于IStatusBar.Stub。
3registerStatusBar将mCommandQueue注册到"Status Bar"服务,并根据StatusBarManagerService定义的icon类别初始化iconList, notificationKeys, notifications。
于是,"Status Bar"系统服务,就可以通过调用应用程序的StatusbarService中的CommandQueue.Callbacks接口功能。
*Statusbar 系列icon显示策略,在StatusBarPolicy中
mIconPolicy = new StatusBarPolicy(this);
*
总结,StatusBarManagerService.java是系统服务,就是一个总代理,系统级别。真正的StatusBar显示相关在StatusbarService中,icon显示策略在StatusBarPolicy中。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?