SystemUI的通知栏通知的排序

本文探讨了Android系统中通知栏通知的排序逻辑。当应用通过NotificationManager设置通知时,通知经过IPC传递到NotificationManagerService。在NotificationManagerService的enqueueNotificationWithTag方法中,通过NotificationRecord对通知的priority进行处理,并转化为mImportance。排序主要依据NotificationComparator,比较mImportance、PackagePriority、priority和mRankingTimeMs等属性,确保通知按设定的优先级和时间显示。

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

不积跬步无以至千里

       最近被提了一个关于通知栏上通知排序的bug,之前就想过我们的通知栏上的顺序是在哪进行排序的?其实为什么呢?因为浸提那应用的同事提了一个设置Setpriority(int value)的方法,结果设置优先级较大了,还是没有排到通知队列的前边,很纳闷,今天就看一下咋回事。

      其实通知由NotificationManager创建,然后通过IPC传到了NotificationManagerService里面,如图

NotificationManager.java的notify方法

其中核心实现是在调用notifyAsUser方法中,如下图:

SystemUIAndroid系统中扮演着极其重要的角色,它是用户界面系统的核心组件,用于展示系统级信息并提供与用户交互的接口。在架构设计上,SystemUI通过模块化的方式实现了各个关键功能的集成和管理。每一个模块,如状态栏、通知、锁屏等,都是一个独立的组件,但它们又通过SystemUI的整体架构紧密协作。 参考资源链接:[SystemUI详解:架构设计、模块与功能介绍](https://wenku.youkuaiyun.com/doc/fohj5hc9xt?spm=1055.2569.3001.10343) 具体来说,状态栏模块负责显示设备的基本状态信息,例如时间、电池电量、网络连接等,并且能够响应用户的交互,如滑动展开更多的系统信息或者通知通知模块则管理着应用发送的通知信息,通过NotificationChannel进行分类和优先级排序,确保用户能够及时接收到重要的通知,并提供用户响应通知的入口。锁屏模块则提供了一个安全的界面,通过各种生物识别技术如指纹、面部识别等,来实现设备的解锁。 SystemUI通过一个统一的框架来协调这些模块的工作,例如利用FragmentHostManager来管理不同的界面片段,以及利用系统服务来维护各个模块之间的数据同步和状态更新。例如,当有新的通知到达时,通知模块会通知状态栏模块进行更新,而锁屏模块则会根据用户的设置来决定是否允许在锁屏状态下显示这些通知。 推荐深入阅读《SystemUI详解:架构设计、模块与功能介绍》,这篇文章提供了对SystemUI架构和各个模块实现细节的全面解析,通过类图和结构图展示了模块之间的关系和交互流程,帮助开发者更好地理解SystemUIAndroid系统中的作用以及它如何管理关键模块。 参考资源链接:[SystemUI详解:架构设计、模块与功能介绍](https://wenku.youkuaiyun.com/doc/fohj5hc9xt?spm=1055.2569.3001.10343)
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rom_Fisher

赠人玫瑰,手留余香。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值