如何减少WorkManager中PeriodicWorkManager的时间

Shu*_*ngh 8 android android-jetpack android-workmanager

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

小智 8

我们有一个技巧可以减少 15 分钟的定期运行时间。但您不能使用PeriodicWorkRequest。创建具有初始延迟的 OneTimeWorkRequest 并在工作人员内部工作结束时调用 self 。如果需要,创建backgroundExecutor.execute {}并从内部调用以进行异步调用。意味着调用 self 的工作线程不会被终止或者 onStopped() 不会被调用。

现有工作策略。替换 | 根据您的需要,可能需要保留。


aga*_*ggi 8

一个简单的答案是“否”,您不能将时间减少到少于 MIN_PERIODIC_INTERVAL_MILLIS,它被硬编码为 15 分钟。

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

为此,您需要WorkManagerTestInitHelperandroidx.work.testing.

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

//Current stable release is 2.3.4
androidTestImplementation "androidx.work:work-testing:2.3.4
Run Code Online (Sandbox Code Playgroud)

接下来,您需要使用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());

}
Run Code Online (Sandbox Code Playgroud)

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

了解有关测试 WorkManager 的更多信息,请访问https://developer.android.com/reference/androidx/work/testing/WorkManagerTestInitHelperhttps://developer.android.com/reference/androidx/work/testing/TestDriver


Ala*_*lan 0

您无法更改 15 分钟的最短时间。如果可以改成小于这个值,那就不叫最小值了。根据您的需要尝试使用警报管理器或 FCM。请参阅以下链接了解更多详细信息:https ://developer.android.com/training/efficient-downloads/regular_updates