【问题标题】:Periodic work requests with WorkManager not workingWorkManager 的定期工作请求不起作用
【发布时间】:2022-01-05 15:46:12
【问题描述】:
  • 我正在使用Workmanager 在几分钟内执行任务,但它只在第一次执行。从我的角度来看,它应该每分钟执行一次。
  • 我正在设备上进行测试,而应用程序处于前台运行且电源已打开。

代码:

class MainActivity : AppCompatActivity() {

    val TAG: String = "MainActivity"
    lateinit var workLiveData: LiveData<List<WorkInfo>>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        initWM()
    }

    private fun initWM() {
        val request = PeriodicWorkRequestBuilder<DemoWorker>(1, TimeUnit.MINUTES)
        .addTag(TAG)
        .build()
    
    WorkManager.getInstance(this).enqueueUniquePeriodicWork(TAG, 
        ExistingPeriodicWorkPolicy.REPLACE, request)
    }
}

DemoWorker:

class DemoWorker(
    context: Context,
    params: WorkerParameters
) : Worker(context, params) {

    val TAG: String = "MainActivity"

    override fun doWork(): Result {
        Log.d(TAG, "doWork: ")
        return try {
            Result.success(workDataOf("KEY" to "SUCCESS"))
        } catch (e: Exception) {
            Result.failure()
        }
    }
}

【问题讨论】:

标签: android kotlin android-workmanager


【解决方案1】:

关于“最小间隔”的提醒。 WorkManager 正在平衡两个不同的需求:应用程序及其 WorkRequest,以及 Android 操作系统及其限制电池消耗的需求。因此,即使在 WorkRequest 上设置的所有约束都得到满足,您的 Work 仍然可以运行,但会有一些额外的延迟。

所以你要替换一个接一个的工作。操作系统可能没有适当的时间来执行工作。所以最好的选择是尝试延迟 1 小时。

您可以使用 flexInterval。让我们看一个示例。假设您想构建一个周期为 30 分钟的定期工作请求。您可以指定一个小于此时间段的 flexInterval,例如 15 分钟的 flexInterval。 使用此参数构建 PeriodicWorkPequest 的实际代码是:

val logBuilder = PeriodicWorkRequestBuilder<MyWorker>(
                     30, TimeUnit.MINUTES, 
                     15, TimeUnit.MINUTES)

结果是我们的worker会在周期的后半段执行(flexInterval总是定位在重复周期的末尾):

【讨论】:

  • 我对@9​​87654322@ 和flexInterval 感到困惑。
  • flexInterval 更像是给了操作系统从时间 A 到时间 B 的时间范围,您可以执行这项工作。在示例中,它可以在每次周期性工作后的 15 - 30 分钟内执行工作。它是具有附加参数的相同构建器。
【解决方案2】:
  • 如此处所述Here,PeriodicWorkRequest 的最小间隔持续时间(以毫秒为单位)为900000,即15 minutes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多