乐趣区

关于android:功耗问题之过多唤醒源-wakeups

和你一起一生学习,这里是程序员 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 执行后台任务,因为它具备以下长处:

  • 批处理 - 合并作业,以缩小电池耗费
  • 持久性 - 如果重新启动设施,则在重新启动实现后运行打算的 WorkManager 作业
  • 条件 - 作业能够依据条件运行,例如设施是否正在充电或 WiFi 是否可用

无关更多信息,请参阅《后盾解决指南》。

不要 AlarmManager  用于安顿仅在利用程序运行时才无效的计时操作(换句话说,当用户退出应用程序时应勾销计时操作)。在这种状况下,请应用  Handler 该类,因为它更易于应用且效率更高。

情谊举荐:
Android 干货分享

至此,本篇已完结。转载网络的文章,小编感觉很优良,欢送点击浏览原文,反对原创作者,如有侵权,恳请分割小编删除,欢迎您的倡议与斧正。同时期待您的关注,感谢您的浏览,谢谢!

退出移动版