我一直在使用WorkManager为我的应用程序创建通知。就我的目的而言,我认为PeriodicWorkRequest是最合适的,但是经过一些测试和在线阅读,它看起来非常不可靠。使用最小间隔时间(15分钟),应用程序关闭,工人醒来5-6次,然后似乎被杀死。
那么,如何创造背景工作,在合理的时间间隔内醒来呢?创建基于事件的通知的最佳方法是什么?我的想法是在较短的时间间隔内检查事件(例如,检查数据库中的新内容)( 15分钟也不太理想),但考虑到它在PeriodicWorkRequest中不太有效,而且也是文档中推荐的方法,那么我的具体选择是什么?
发布于 2022-05-18 12:47:39
基本上,Android的想法是让你不能做你想做的事情,因为我们作为开发人员试图杀死电池。
你需要了解这些限制的演变过程:
版本6- Doze:
https://developer.android.com/training/monitoring-device-state/doze-standby 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/guide/components/broadcasts https://developer.android.com/about/versions/nougat/android-7.0-changes#bg-opt
版本8.0后台执行限制:https://developer.android.com/about/versions/oreo/background#services
版本9 StandBy存储桶--取决于应用程序的使用方式,您可以使用不同的资源--比如唤醒应用程序的时间,使用网络的时间等等
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/topic/performance/appstandby
节省电池的改进:
https://developer.android.com/about/versions/pie/power#battery-saver
电源管理限制-非常重要。https://developer.android.com/topic/performance/power/power-details
版本11和12应用程序休眠
https://developer.android.com/topic/performance/app-hibernation
长话短说-你需要阻止所有这些限制来损害你的工作。但是您需要遵守,因为这对用户更好。
但是没有一个API只会说:"f**k所有这些限制,做开发人员想做的任何事情。“
如果你需要精确的时间-你需要AlarmManager。
如果您不知道什么时候需要完成工作,并依赖于外部推送通知,则可以将工作转移到WorkManager。
如果您需要不需要时间限制的定期工作--您可能不会使用AlarmMangaer并确保工作已经完成,但是您不能确定什么时候完成,因为有许多限制和优先级将节省资源。
此外,您还可以要求用户免于电池优化:
如果您想知道为什么没有执行工作,就需要检查JS转储,看看哪些限制没有得到满足:
https://stackoverflow.com/questions/72254896
复制相似问题