定期工作请求停止重复的原因是什么?

What are the reasons a periodic work request would stop repeating?

我有一个周期性的工作请求,它在一天或更长时间后突然停止重复。

inline fun <reified W : Worker> Context.schedule(repeatInterval: Long = 1,
                                                 interval: TimeUnit = TimeUnit.HOURS,
                                                 flexTimeInterval: Long? = null,
                                                 flexInterval: TimeUnit? = null,
                                                 constraints: Constraints = networkConstraint) {

    val workManager = WorkManager.getInstance(this)
    val workRequestBuilder = if (flexInterval != null && flexTimeInterval != null) {
        PeriodicWorkRequestBuilder<W>(repeatInterval, interval, flexTimeInterval, flexInterval)
    } else {
        PeriodicWorkRequestBuilder<W>(repeatInterval, interval)
    }

    val work = workRequestBuilder
            .setConstraints(constraints)
            .addTag(W::class.java.name)
            .build()
    background {
        workManager.cancelAllWorkByTag(W::class.java.name).await()
        workManager.enqueue(work)
    }
}

在我的应用程序的最新版本之前一直很好。我注意到它只是在一段时间后停止重复出现。以前连续几个月没问题。

请问除了周期性的工作请求被取消之外还有什么原因突然停止?如果一个作业挂起并阻塞它的线程并且永远不会 return Work 结果会导致问题吗?根据文档,如果作业在 10 分钟内没有 return,它就会停止。这就是为什么我很困惑...我唯一取消它的地方是在我安排它之前。

每 35 分钟安排一次:

fun schedule(context: Context) = context.schedule<DeviceCheckInWorker>(
                flexTimeInterval = 15,
                interval = TimeUnit.MINUTES,
                repeatInterval = 35,
                flexInterval = TimeUnit.MINUTES)

觉得问这个问题很傻。答案如文档所述,定期工作请求将继续重复,直到被取消。

没有理由不重复。

我们的新版本引入了一个事件来响应外部源意图,这实际上会从另一个 activity 重新启动我们的应用程序。在另一个 activity 中是启动代码,它首先用 WorkManager.getInstance(context).cancelAllWork() 清除所有工作人员,然后再次启动计划的工作人员。唯一的问题是我认为正在停止的这个特定的定期工作人员没有在此函数中再次安排。

所以当然...就像我有预感一样,我自己专门取消它是我的错。不得不问......是那些时刻之一。 logcat 不得不看我的应用程序一天一点。欢乐时光。

抱歉,Whosebug 提出了无用的问题。