У класса диспетчера работ возникла проблема с выполнением метода 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 минут.
Предполагая, что ваш
Предлагаю при тестировании изменить существующую политику работы на «ЗАМЕНИТЬ».
Из источника диспетчера работ 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;
}
}
...
}
Есть перегрузка