У класса диспетчера работ возникла проблема с выполнением метода doWork()

Сначала позвольте мне поправить, пожалуйста:

Диспетчер работ: минимальный интервал повторения, который можно определить, составляет 15 минут (как в API JobScheduler).Если это не так, дайте мне знать.

Я создал ниже класс для выполнения периодических запросов на работу:

      object WorkManagerUtils {

fun syncWorkManager() {
    val myConstraints = Constraints.Builder()
            .setRequiredNetworkType(NetworkType.CONNECTED)
            .build()

    val syncRequest = PeriodicWorkRequest
            .Builder(MyWorker::class.java, 20000, TimeUnit.MILLISECONDS)
            .setConstraints(myConstraints)
            .build()

    WorkManager
            .getInstance()
            .enqueueUniquePeriodicWork(
                    Constants.WORKER,
                    ExistingPeriodicWorkPolicy.KEEP,
                    syncRequest)
   }
}

Ниже мой рабочий класс. Пожалуйста, проверьте :

      class MyWorker(val context: Context, param: WorkerParameters) : Worker(context, param) {
override fun doWork(): Result {
    if (isNetworkAvailable(context)) {
        callSyncApi()
    } else {
        WorkManagerUtils.syncWorkManager()
    }
    return Result.success()
}

private fun callSyncApi() {
        ToastUtils.shortToast(0,"This is working")
   }
 }

Вызов этого в моей деятельности, как показано ниже:

      WorkManagerUtils.syncWorkManager()

Вы можете заметить, что в настоящее время я просто показываю тост как свою работу. Я хочу проверить, работает это или нет?

Но тост не отображается.

1 ответ

Любой интервал менее 15 минут будет заменен на 15 минут.

Предполагая, что ваш работает, я считаю, что менеджер по работе выбрал 15-минутный интервал, и существующая политика работы «СОХРАНИТЬ» предотвратила изменение графика и тестирование.

Предлагаю при тестировании изменить существующую политику работы на «ЗАМЕНИТЬ».

Из источника диспетчера работ 1.0.0:

      public final class PeriodicWorkRequest extends WorkRequest {
    ...
    public static final long MIN_PERIODIC_INTERVAL_MILLIS = 15 * 60 * 1000L; // 15 minutes
    ...
}

public class WorkSpec {
    ...
    public void setPeriodic(long intervalDuration) {
        if (intervalDuration < MIN_PERIODIC_INTERVAL_MILLIS) {
            ...
            IntervalDuration = MIN_PERIODIC_INTERVAL_MILLIS;
        }
    }
    ...
}

Есть перегрузка функция, которая применяет тот же интервал принудительного исполнения.