Kotlin Workmanager 奇怪的执行时间

Kotlin Workmanager strange execution times

我创建了我的第一个“PeriodicWorkManager”。我希望它每小时 运行。 (最好是在小时的第 0 分钟)。所以我创建了一个这样的 Workmanager:

WorkManager.getInstance(this).cancelAllWorkByTag("DrinkNotify")
        val work2 = PeriodicWorkRequest.Builder(NotifyWorker::class.java, 1, TimeUnit.HOURS)
            .setConstraints(Constraints.NONE)
            .addTag("DrinkNotify")
            .build()
        WorkManager.getInstance(this).enqueue(work2)

NotifyWorker class 看起来像这样:

class NotifyWorker(appContext: Context, workerParams: WorkerParameters):Worker(appContext, workerParams) {
    var appContext = appContext
    override fun doWork(): Result {
        if(this.tags.contains("DrinkNotify")){
            Log.d("CUSTOM","WURDE AUSGEFÜHRT")
        }
        return Result.retry()
    }
}

我启动了 WorkManager 并看到了初始函数 运行ning(这对我来说没问题),但在初始化它后 运行s 之后每小时 运行ning 不是这样的:

2021-02-03 20:38:31.995 22945-22973/com.workmanagerdemo D/CUSTOM: WURDE AUSGEFÜHRT

2021-02-03 20:39:32.108 22945-22990/com.workmanagerdemo D/CUSTOM: WURDE AUSGEFÜHRT

2021-02-03 20:41:32.213 22945-23006/com.workmanagerdemo D/CUSTOM: WURDE AUSGEFÜHRT

2021-02-03 20:45:32.304 22945-22973/com.workmanagerdemo D/CUSTOM: WURDE AUSGEFÜHRT

2021-02-03 20:54:34.114 22945-22990/com.workmanagerdemo D/CUSTOM: WURDE AUSGEFÜHRT

所以起初它在初始后 1 分钟执行,然后是 2 分钟、4 分钟和 9 分钟。

我不明白为什么 运行 会这样。你有什么想法吗?

提前致谢!

WorkManager 不保证在特定时间执行您的工作。对于上述场景,您可以使用 AlarmManagerWorkManager

WorkManager 将在满足约束条件后开始您的工作,AlarmManager 将每隔一小时执行一次。

这是一个项目,其中包含它的代码,但它不能满足您的所有要求。你可以玩它,你会知道它是如何执行的。

GitHub Project