和你一起终身学习,这里是程序员 Android

本篇文章主要介绍 Android 开发中的 性能 部分知识点,通过阅读本篇文章,您将收获以下内容:

  1. 过多的唤醒源wakeups

  2. 如何fix 过多唤醒源问题

  3. 最佳实践

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相关推荐

  1. 唤醒时间过长 Android,关于android:功耗问题之过多唤醒源-wakeups

    和你一起一生学习,这里是程序员 Android 本篇文章次要介绍 Android 开发中的 性能 局部知识点,通过浏览本篇文章,您将播种以下内容: 过多的唤醒源wakeups 如何fix 过多唤醒源问 ...

  2. Android 功耗(12)---如何查找待机唤醒源

    如何查找待机唤醒源 系统场景的唤醒源:EINT/CONN/CLDMA EINT: PMIC的唤醒. a.Powerkey 唤醒后面的log会有pwrkey_int_handler b. rtc ala ...

  3. 手机功耗之唤醒源详解

    和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一.手机功耗问题浅析博文 二.Sleep .suspend 三.SPM (System Power Ma ...

  4. linux内核唤醒源,从挂起到实现,你知道内核是如何实现的?

    导读 Linux 内核提供了多种睡眠状态目前总共有四种睡眠状态,分别是:挂起到空闲加电待机.挂起到内存和挂起到磁盘.这些状态分别对应 ACPI 的 4 种状态:S0,S1,S3 和 S4.挂起到空闲是 ...

  5. 有关中断唤醒源的思考

    各位大佬好,如下是关于中断唤醒系统的一个流程上的总结,由于这方面知识过于复杂,又牵扯到SOC厂商的设计,而且我也没有做过这方面工作,所以一半来自文档一半靠猜测,都不一定对,反正自己给自己解释得通了.希 ...

  6. 【Android休眠】之PowerKey唤醒源实现【转】

    转自:https://blog.csdn.net/u013686019/article/details/53677531 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog ...

  7. 主动/被动唤醒源与网络主动/被动唤醒

    1主动唤醒源/被动唤醒源 主动唤醒源:承担着主动唤醒网络责任的唤醒源,称为主动唤醒源.比如:KL15硬线,User请求,ERA信号等. KL15硬线:通过KL15硬线方式唤醒网络,说明当前网络没有节点 ...

  8. 待机电流问题,如何查找EINT唤醒源

    产生 EINT 的 channel 会记录在 EINT_STA 状态寄存器里面,这一点所有平台都一样:只要知道这个状态寄存器的值就可以知道哪个 channel 发生了中断:但是不同平台的 log 细节 ...

  9. S32K3xx低功耗获取唤醒源

    S32K3xx低功耗获取唤醒源 目录 S32K3xx低功耗获取唤醒源 一.获取复位原因 二.获取唤醒源 1.思路分析 2.程序分析 在上一篇学习总结中知道S32K3xx只有两种运行模式:RUN和Sta ...

最新文章

  1. Python JS Jquery Json 转换关系
  2. WF4.0入门系列1——创建一个简单的工作流
  3. 大学c语言程序设计大赛,关于举办宁夏大学第二届C语言程序设计大赛的通知
  4. Maven使用技巧001--- 离线更新nexus中央仓库索引的方案
  5. 十、RD 虚拟主机配置(三)
  6. MODIS植被覆盖度
  7. 主动降噪python_主动降噪(Active Noise Control)
  8. 怎样才能够修改PDF文件中的文字大小
  9. 用计算机pol计算方位角,卡西欧计算方位角 计算器算方位角.doc
  10. linux自定义oem分区,怎么样把oem分区里的数据移到虚拟机的硬盘里?
  11. win10 6种截图方法 简介
  12. 乌合之众 -- 群体的意见和信念
  13. AIX下创建jfs2文件系统并挂载到固定目录
  14. PDF格式人工转为Excel
  15. 华清远见-重庆中心-数据库阶段技术总结/知识点梳理/个人总结
  16. HTML页面如何判断是手机访问还是电脑访问
  17. python 笔记--同时输入两个数字
  18. QSL match_phrase 嵌套查询
  19. 镁光闪存颗粒对照表_内存颗粒版本判断方法和编号解析(三星、美光、海力士)...
  20. Zip压缩文件没有解压密码怎么办?

热门文章

  1. Flutter中那些你需要知道的文本知识!
  2. 读1968图灵奖获得者 哈明演讲的感悟
  3. python字符串驻留机制_python字符串驻留(intern)机制
  4. 61、智能指针类模板
  5. 我是怎么提升写作能力的
  6. C语言经典算法100例(一)
  7. android imageview.setVisibility(View.VISIBLE)设置无效,代码已执行但是图片不显示
  8. vue 项目中引用并使用cdn上面的js文件
  9. Flink(八)Flink的Parallelism并行度
  10. TrackingMore API C# 调用示例