WorkManager 是否在满足所有约束后立即执行其 PeriodicWork?

Does the WorkManager executes its PeriodicWork immediately after all constraints are met?

我似乎找不到任何关于 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 是立即执行它的工作(分别是下一个可能的执行window),还是需要等待另一个时间段(例如~1h)?

Let's say the updateInterval is 1h, network is connected and the work is executed. One hour has passed, the device is disconnected, the work is not executed.

Android 系统确保在满足约束的第一刻,您的 WorkManager 将开始执行。为此,您必须信任 Android 团队,但老实说,它看起来经过了很好的测试。当您重新启动设备时也会发生这种情况,WorkManager 只是 "magically" 重新出现。

你会在某些时候 Android 杀死你的后台工作人员,但这种情况非常罕见。例如,当您从设置中强制停止您的应用程序时,可能会发生这种情况。

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

不,WorkManager 不一定会立即执行您的工作。正如官方文档 (https://developer.android.com/topic/libraries/architecture/workmanager) 中所述,工作是可以推迟的。在设备休眠模式等情况下,您的工作可能不会立即执行。

如果您想了解更多选项,请查看此页面:https://developer.android.com/guide/background/