和你一起一生学习,这里是程序员 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 可能会混同它们。而是应用硬编码的字符串。
- 不要在警报标签中增加计数器或惟一标识符。零碎将无奈聚合以这种形式设置的警报,因为它们都具备惟一的标识符。
- 疏忽名称中的任何个人身份信息(PII),例如电子邮件地址。否则,设施将记录日志
解决问题后,通过运行以下 ADB 命令来验证唤醒警报是否按预期工作:
adb shell dumpsys alarm
该命令提供无关设施上警报系统服务状态的信息。无关更多信息,请参见 dumpsys。
3. 最佳实际
仅当您的利用须要执行面向用户的操作(例如公布告诉或揭示用户)时,才应用唤醒警报。无关 AlarmManager 最佳做法的列表,请参阅 Scheduing Repeating Alarms。
不要 AlarmManager
用于安顿后台任务,尤其是反复的或网络后台任务。倡议应用 WorkManager 执行后台任务,因为它具备以下长处:
- 批处理 - 合并作业,以缩小电池耗费
- 持久性 - 如果重新启动设施,则在重新启动实现后运行打算的 WorkManager 作业
- 条件 - 作业能够依据条件运行,例如设施是否正在充电或 WiFi 是否可用
无关更多信息,请参阅《后盾解决指南》。
不要 AlarmManager 用于安顿仅在利用程序运行时才无效的计时操作(换句话说,当用户退出应用程序时应勾销计时操作)。在这种状况下,请应用 Handler 该类,因为它更易于应用且效率更高。
情谊举荐:
Android 干货分享
至此,本篇已完结。转载网络的文章,小编感觉很优良,欢送点击浏览原文,反对原创作者,如有侵权,恳请分割小编删除,欢迎您的倡议与斧正。同时期待您的关注,感谢您的浏览,谢谢!