Android 推荐且可靠的 API 用于定期后台工作?

2024-04-20

我一直在使用 WorkManager 为我的应用程序创建通知。就我的目的而言,我认为PeriodicWorkRequest是最合适的,但经过一些测试和在线阅读后,它似乎非常不可靠。使用最小间隔(15 分钟)并关闭应用程序,该工作人员醒来 5-6 次,然后似乎被杀死了。

那么如何创建以合理的时间间隔唤醒的后台工作呢?创建基于事件的通知的最佳方法是什么?我的想法是以较小的时间间隔(15 分钟也不太理想)检查事件(例如,检查数据库中的新内容),但由于它不能与PeriodicWorkRequest 很好地配合使用,因此也是推荐的根据文档的方法,我到底有什么选择?


基本上,Android 的想法是让你无法做你想做的事情,因为我们作为开发人员试图耗尽电池。

您需要了解限制的演变情况:

版本 6 - 打瞌睡:

https://developer.android.com/training/monitoring-device-state/doze-standby https://developer.android.com/training/monitoring-device-state/doze-standby https://developer.android.com/about/versions/marshmallow/android-6.0-changes#behavior-power https://developer.android.com/about/versions/marshmallow/android-6.0-changes#behavior-power

版本 7 另一种 Doze 状态,具有更多限制:https://developer.android.com/about/versions/nougat/android-7.0-changes#perf https://developer.android.com/about/versions/nougat/android-7.0-changes#perf

广播限制:https://developer.android.com/guide/components/broadcasts https://developer.android.com/guide/components/broadcasts https://developer.android.com/about/versions/nougat/android-7.0-changes#bg-opt https://developer.android.com/about/versions/nougat/android-7.0-changes#bg-opt

版本 8.0 后台执行限制:https://developer.android.com/about/versions/oreo/background#services https://developer.android.com/about/versions/oreo/background#services

版本 9 备用存储桶 - 根据应用程序的使用方式,您可以使用不同的资源 - 例如唤醒应用程序的时间、使用网络的时间等

https://developer.android.com/about/versions/pie/power#buckets https://developer.android.com/about/versions/pie/power#buckets https://developer.android.com/about/versions/12/behavior-changes-all#restrictive-app-standby-bucket https://developer.android.com/about/versions/12/behavior-changes-all#restrictive-app-standby-bucket https://developer.android.com/topic/performance/appstandby https://developer.android.com/topic/performance/appstandby

省电改进:

https://developer.android.com/about/versions/pie/power#battery-saver https://developer.android.com/about/versions/pie/power#battery-saver

电源管理限制- 真的很重要。https://developer.android.com/topic/performance/power/power-details https://developer.android.com/topic/performance/power/power-details

版本 11 和 12 应用程序休眠

https://developer.android.com/topic/performance/app-hibernation https://developer.android.com/topic/performance/app-hibernation

长话短说——您需要防止所有这些限制损害您的工作。但您需要遵守,因为这对用户更好。

但没有一个 API 只会说:“去他妈的所有这些限制,做开发者想做的任何事情。”

如果你需要准确的时间- 你需要警报管理器。

如果您不知道何时需要完成工作并依赖外部 - 推送通知,则可以将工作转移到 WorkManager。

如果您需要对时间要求不高的定期工作 - 您可能不会使用 AlarmMangaer 并确保工作完成,但您无法确定何时完成,因为有很多限制,并且优先考虑的是节省资源。

此外,您还可以要求用户免于电池优化:

https://developer.android.com/training/monitoring-device-state/doze-standby#support_for_other_use_cases https://developer.android.com/training/monitoring-device-state/doze-standby#support_for_other_use_cases

如果你想知道为什么工作没有执行,你需要检查 JS 转储并查看不满足哪些限制:

https://developer.android.com/topic/libraries/architecture/workmanager/how-to/debugging#use-alb-shell0dumpsys-jobscheduler https://developer.android.com/topic/libraries/architecture/workmanager/how-to/debugging#use-alb-shell0dumpsys-jobscheduler

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 推荐且可靠的 API 用于定期后台工作? 的相关文章