如果我在09:00设置它,在哪个范围内运行WorkManager?

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

我需要在每天早上09:00执行功能。我知道AlarmManager但我想使用WorkManager。在哪个范围内运行此代码? + - 10分钟?有人试过吗?我不使用任何约束。

android-workmanager
1个回答
1
投票

如果您需要在上午9:00运行工作,WorkManager可能不是您的最佳选择。

您在WorkManager中设置的期间,对于定期的Worker,它是最小值,但是,如果设备处于打盹模式,您的工作将不会运行到下一个执行窗口。鉴于您无法指定一天中的某个时间来运行您的工作,但只能指定一个时间间隔(比方说24小时)。工作执行的时间将日复一日。

因此,就目前而言,简单的PeriodicWorkRequest可能不是您的用例的最佳选择。

另一种方法是使用OneTimeWorkRequest,它使用您在Worker中计算的初始dalay在第二天安排自己:

class DailyWorker(ctx: Context, params: WorkerParameters) : Worker(ctx, params) 
{
    override fun doWork(): Result {
        // Do Something

        val now = LocalTime.now()
        val nineAM = LocalTime.parse("09:00:00")
        val timeDiff = Duration.ofHours(24).minus(Duration.between(nineAM, now))
        val dailyWorkRequest = OneTimeWorkRequestBuilder<DailyWorker>()
                .setInitialDelay(timeDiff)
                .addTag(TAG_OUTPUT)
                .build()
        WorkManager.getInstance(applicationContext).enqueue(dailyWorkRequest)

        return Result.success()
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.