在满足所有约束后,WorkManager是否立即执行其周期性工作?

问题描述 投票:1回答:2

似乎在满足所有约束后,我找不到关于WorkManager如何处理其工作的任何特定信息。

假设我们已经建立了这样的WorkManager。

val constraints = Constraints.Builder()
      .setRequiredNetworkType(NetworkType.CONNECTED)
      .build()

val syncOnlyOnce = PeriodicWorkRequest.Builder(PeriodicJob::class.java, updateInterval, TimeUnit.MILLISECONDS)
     .setConstraints(constraints)
     .build()

假设updateInterval为1h,网络已连接并且工作已执行。一个小时过去了,设备已断开连接,无法执行工作。

设备重新连接后会发生什么? WorkManager是立即(分别是下一个可能的执行窗口)立即执行其工作,还是需要等待另一个时间段(例如〜1h)?

android android-jetpack android-workmanager
2个回答
0
投票

假设updateInterval为1h,网络已连接且工作正常被执行。一个小时过去了,设备已断开连接,工作正常未执行。

Android系统确保在满足约束的第一刻,您的WorkManager将开始执行。您必须为此信任Android团队,但实际上已经过了良好的测试。重新启动设备时也会发生,WorkManager只是“神奇地”重新出现。

虽然您会在某些时候杀死Android的背景工作者,但这很少见。例如,当您强行停止设置应用程序时,可能会发生这种情况。

我认为我在这种情况下有几秒钟的延迟,但仅在我的OnePlus设备上发生。


0
投票

否,WorkManager不一定立即执行您的工作。如官方文档(https://developer.android.com/topic/libraries/architecture/workmanager)所述,工作是可延期的。在设备打ze模式下,您的工作可能无法立即执行。

如果想进一步了解您的选项,请参阅此页面:https://developer.android.com/guide/background/

© www.soinside.com 2019 - 2024. All rights reserved.