我试图找到一种在Android中执行定期工作的最佳方法,它可以与Doze模式和应用待机模式协同工作。
我已经尝试了使用周期性请求的WorkManager,在开始时它可以正常工作(对于15分钟的请求),但随着时间的推移,时间插槽会减少,一周后似乎只触发一次。
什么是获得所需行为并仍然友好地使用Doze模式和应用待机的最佳方式?
我试图找到一种在Android中执行定期工作的最佳方法,它可以与Doze模式和应用待机模式协同工作。
我已经尝试了使用周期性请求的WorkManager,在开始时它可以正常工作(对于15分钟的请求),但随着时间的推移,时间插槽会减少,一周后似乎只触发一次。
什么是获得所需行为并仍然友好地使用Doze模式和应用待机的最佳方式?
根据我们在问题评论中的对话,我有关于我的测试更新。
虽然我今天不得不停止测试,但你可以从日期上看到,测试已经进行了将近一个星期。我可以证明,WorkManager
和FCM
(没有高优先级)都能够很好地工作。
我的做法是:无论我是否注册了PeriodicWorkRequest
,每当收到一条FCM消息,我就会为同一个已经注册了PeriodicWorkRequest
的工作任务入队一个OneTimeWorkRequest
。
我的条件如下:
WorkManager
版本 - 1.0.0alpha04PeriodicWorkRequest
,15分钟。NetworkType.CONNECTED
约束。com.google.android.gms:play-services-gcm:11.8.0
不同设备的行为有所不同,但总体行为如下:
在前几天(例如Galaxy S8的前3天),工作任务每隔约15分钟运行一次;其余天数内,它每1-5小时运行一次。对于我想要实现后台高效使用电池的目的而言,这是非常完美的。比你描述的没有Push消息每天运行一次更好。
OneTimeWorkRequest
加入队列,它会在系统决定时触发(可能立即),但最终会触发。在我的应用程序中,我同时使用由 FCM 触发的PeriodicWorkRequest
和OneTimeWorkRequest
,它们都会触发相同的工作。 - HedeH