功耗问题之过多唤醒源 wakeups
和你一起终身学习,这里是程序员 Android
本篇文章主要介绍 Android
开发中的 性能 部分知识点,通过阅读本篇文章,您将收获以下内容:
过多的唤醒源wakeups
如何fix 过多唤醒源问题
最佳实践
1.过多的唤醒源wakeups
Wakeups 是 AlarmManager API 中的一种机制 ,它可让开发人员在指定时间设置警报,进而达到唤醒设备的目的。您的应用通过使用 RTC_WAKEUP 或ELAPSED_REALTIME_WAKEUP 标志调用AlarmManager中的set()
方法来设置唤醒警报。当触发唤醒警报后,设备将退出低功耗模式,并在执行警报 onReceive()或 onAlarm() 方法的同时holdspartial wake lock 。如果唤醒警报触发过多,它们可能会耗尽设备的电池电量。
为了帮助您提高应用程序质量,Android会自动监视应用程序是否存在过多的唤醒警报,并以Android vitals的形式显示信息。有关如何收集数据的信息,请参阅Play控制台文档。
如果您的应用过度唤醒设备,则可以使用此页面中的指导来诊断和解决问题。
2. 如何fix 过多唤醒源问题
AlarmManager 是在Android平台的早期版本中推出的,但随着时间的推移,以前需要很多 AlarmManager 的用例现在更好新功能提供服务(比如:WorkManager)。本部分包含有关减少唤醒警报的提示,但从长远来看,请考虑迁移您的应用以遵循第三节最佳实践部分中的建议。
确定您在应用中安排唤醒警报的位置,并减少触发这些警报的频率。这里有一些提示:
查找对包含RTC_WAKEUP 或 ELAPSED_REALTIME_WAKEUP 标志的各种 AlarmManager set() 方法的调用 。
我们建议您将包,类或方法的名称包括在警报的标记名称中,以便您可以轻松地在源中识别设置警报的位置。以下是一些其他提示:
忽略名称中的任何个人身份信息(PII),例如电子邮件地址。否则,设备将记录日志
_UNKNOWN
而不是警报名称。不要以编程方式获取类或方法的名称,例如通过调用 getName() ,因为Proguard可能会混淆它们。而是使用硬编码的字符串。
不要在警报标签中添加计数器或唯一标识符。系统将无法聚合以这种方式设置的警报,因为它们都具有唯一的标识符。
解决问题后,通过运行以下ADB 命令来验证唤醒警报是否按预期工作:
adb shell dumpsys alarm
该命令提供有关设备上警报系统服务状态的信息。有关更多信息,请参见 dumpsys。
3. 最佳实践
仅当您的应用需要执行面向用户的操作(例如发布通知或提醒用户)时,才使用唤醒警报。有关AlarmManager最佳做法的列表,请参阅Scheduing Repeating Alarms。
不要 AlarmManager
批处理-合并作业,以减少电池消耗
持久性-如果重新启动设备,则在重新启动完成后运行计划的WorkManager作业
条件-作业可以根据条件运行,例如设备是否正在充电或WiFi是否可用
有关更多信息,请参阅《后台处理指南》。
不要 AlarmManager 用于安排仅在应用程序运行时才有效的计时操作(换句话说,当用户退出应用程序时应取消计时操作)。在这种情况下,请使用 Handler 该类,因为它更易于使用且效率更高。
友情推荐
Android开发干货分享
至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!
功耗问题之过多唤醒源 wakeups相关推荐
- 唤醒时间过长 Android,关于android:功耗问题之过多唤醒源-wakeups
和你一起一生学习,这里是程序员 Android 本篇文章次要介绍 Android 开发中的 性能 局部知识点,通过浏览本篇文章,您将播种以下内容: 过多的唤醒源wakeups 如何fix 过多唤醒源问 ...
- Android 功耗(12)---如何查找待机唤醒源
如何查找待机唤醒源 系统场景的唤醒源:EINT/CONN/CLDMA EINT: PMIC的唤醒. a.Powerkey 唤醒后面的log会有pwrkey_int_handler b. rtc ala ...
- 手机功耗之唤醒源详解
和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一.手机功耗问题浅析博文 二.Sleep .suspend 三.SPM (System Power Ma ...
- linux内核唤醒源,从挂起到实现,你知道内核是如何实现的?
导读 Linux 内核提供了多种睡眠状态目前总共有四种睡眠状态,分别是:挂起到空闲加电待机.挂起到内存和挂起到磁盘.这些状态分别对应 ACPI 的 4 种状态:S0,S1,S3 和 S4.挂起到空闲是 ...
- 有关中断唤醒源的思考
各位大佬好,如下是关于中断唤醒系统的一个流程上的总结,由于这方面知识过于复杂,又牵扯到SOC厂商的设计,而且我也没有做过这方面工作,所以一半来自文档一半靠猜测,都不一定对,反正自己给自己解释得通了.希 ...
- 【Android休眠】之PowerKey唤醒源实现【转】
转自:https://blog.csdn.net/u013686019/article/details/53677531 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog ...
- 主动/被动唤醒源与网络主动/被动唤醒
1主动唤醒源/被动唤醒源 主动唤醒源:承担着主动唤醒网络责任的唤醒源,称为主动唤醒源.比如:KL15硬线,User请求,ERA信号等. KL15硬线:通过KL15硬线方式唤醒网络,说明当前网络没有节点 ...
- 待机电流问题,如何查找EINT唤醒源
产生 EINT 的 channel 会记录在 EINT_STA 状态寄存器里面,这一点所有平台都一样:只要知道这个状态寄存器的值就可以知道哪个 channel 发生了中断:但是不同平台的 log 细节 ...
- S32K3xx低功耗获取唤醒源
S32K3xx低功耗获取唤醒源 目录 S32K3xx低功耗获取唤醒源 一.获取复位原因 二.获取唤醒源 1.思路分析 2.程序分析 在上一篇学习总结中知道S32K3xx只有两种运行模式:RUN和Sta ...
最新文章
- Python JS Jquery Json 转换关系
- WF4.0入门系列1——创建一个简单的工作流
- 大学c语言程序设计大赛,关于举办宁夏大学第二届C语言程序设计大赛的通知
- Maven使用技巧001--- 离线更新nexus中央仓库索引的方案
- 十、RD 虚拟主机配置(三)
- MODIS植被覆盖度
- 主动降噪python_主动降噪(Active Noise Control)
- 怎样才能够修改PDF文件中的文字大小
- 用计算机pol计算方位角,卡西欧计算方位角 计算器算方位角.doc
- linux自定义oem分区,怎么样把oem分区里的数据移到虚拟机的硬盘里?
- win10 6种截图方法 简介
- 乌合之众 -- 群体的意见和信念
- AIX下创建jfs2文件系统并挂载到固定目录
- PDF格式人工转为Excel
- 华清远见-重庆中心-数据库阶段技术总结/知识点梳理/个人总结
- HTML页面如何判断是手机访问还是电脑访问
- python 笔记--同时输入两个数字
- QSL match_phrase 嵌套查询
- 镁光闪存颗粒对照表_内存颗粒版本判断方法和编号解析(三星、美光、海力士)...
- Zip压缩文件没有解压密码怎么办?