【问题标题】:Does the WorkManager executes its PeriodicWork immediately after all constraints are met?WorkManager 是否在满足所有约束后立即执行其 PeriodicWork?
【发布时间】:2019-11-14 14:25:14
【问题描述】:

在满足所有约束后,我似乎找不到有关 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


    【解决方案1】:

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

    如果您想了解更多关于您的选择的信息,请查看此页面:https://developer.android.com/guide/background/

    【讨论】:

    • 好的,但是它明确地安排在下一个可能的执行窗口?
    • 是的@6rism0,它被安排在下一个可能的窗口。但是,正如文档中所述,这取决于不同的因素,而不仅仅是连接(可用内存、系统负载等)
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 谢谢!在过去,我遇到了 WorkManager 与各种(主要是亚洲)智能手机制造商的一些操作系统相结合的一些问题,例如一加、华为等有没有可能的解决方案来防止这种情况发生?
    • AFAIK One Plus 有一个错误会杀死后台进程,我对此一无所知,即使是其他进程 :)
    猜你喜欢
    • 1970-01-01
    • 2018-04-11
    • 2014-09-21
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多