android - WorkManager 中如何减少 PeriodicWorkManager 的时间

标签 android android-jetpack android-workmanager

PeriodicTimeRequest最短周期时间为 15 分钟。我想将它从 15 分钟减少到不到 15 分钟。我该怎么做?

最佳答案

一个简单的答案是没有 , 您不能将时间减少到小于 MIN_PERIODIC_INTERVAL_MILLIS 硬编码为 15 分钟。

但是,您可以比 MIN_PERIODIC_INTERVAL_MILLIS(即 15 分钟)更早地测试 PeriodicWorkRequest。

为此,您需要 WorkManagerTestInitHelper可用 androidx.work.testing .

首先,在您的应用程序或模块的 build.gradle 文件中添加以下依赖项:

//Current stable release is 2.3.4
androidTestImplementation "androidx.work:work-testing:2.3.4

接下来需要使用setPeriodDelayMet TestDriver 提供的方法可用于指示间隔已完成并比 MIN_PERIODIC_INTERVAL_MILLIS(15 分钟)更早地执行 PeriodicWorkRequest。
示例代码:
@Test
public void testPeriodicWork(Context context) throws Exception {
    // Setup input data
    Data input = new Data.Builder().put(KEY_1, 1).put(KEY_2, 2).build();

    // Create periodic work request
    PeriodicWorkRequest request = new PeriodicWorkRequest.Builder(MyWorker.class, 15,  TimeUnit.MINUTES)
                                       .setInputData(input)
                                       .build();
    // Enqueue periodic request
    WorkManager.getInstance(context).enqueueUniquePeriodicWork(WORKER_TAG, ExistingPeriodicWorkPolicy.REPLACE, request);

    // Initialize testDriver
    TestDriver testDriver = WorkManagerTestInitHelper.getTestDriver();

    // Tells the testing framework the period delay is met, this will execute your code in doWork() in MyWorker class
    testDriver.setPeriodDelayMet(request.getId());

}

您可以在 https://developer.android.com/topic/libraries/architecture/workmanager/how-to/integration-testing#periodic-work 找到更多关于测试 PeriodicWorkRequest 的信息。

https://developer.android.com/reference/androidx/work/testing/WorkManagerTestInitHelper 上了解有关测试 WorkManager 的更多信息和 https://developer.android.com/reference/androidx/work/testing/TestDriver

关于android - WorkManager 中如何减少 PeriodicWorkManager 的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55135999/

相关文章:

java - 无法在 Android 应用程序的 HttpUrlConnection 中设置 header

android - 使用 Android 提交到 Google 电子表格表单

android - 为什么在 Android Studio 中会出现 'Cannot access database on the main thread since it may potentially lock the UI for a long period of time.' 错误?

android - 无法在 jetpack 数据存储类中写入首选项未找到异常

android - ViewModel 类实现 LifecycleObserver 可以吗?

android - 如何使用 Workmanager 检测新照片

android - WorkManager setRequiresDeviceIdle 令人困惑

Android:点击保存后相机崩溃

android - 如何将不同的对象作为参数传递给 AsyncTask?

Android WorkManager 链式工作未在 alpha04 上运行