Android Oreo workmanager PeriodicWork не работает - PullRequest
0 голосов
/ 13 ноября 2018

Версия Android: 8.1.0

Устройство: Infinix X604B

Workmanager: 1.0.0-alpha11 (последняя версия)

Запланирован запуск PeriodicWorkRequest после каждых 15минут.Рабочий запрос выполняется через каждые 15 минут в течение примерно одного часа.Тогда PeriodicWorkRequest перестает работать.За 8 часов фоновая работа вообще не запланирована.Я не убил свое приложение, оно на заднем плане.

Когда я возвращаю приложение на передний план, PeriodicWorkRequest снова запускает фоновую задачу.С аналогичным опытом нет повторений после того, как я поместил свое приложение в фоновом режиме.

Я отключил оптимизацию батареи для своего приложения.

Вот пример класса My Worker.

class TestWorker extends Worker {
public TestWorker(
        @NonNull Context context,
        @NonNull WorkerParameters params) {
    super(context, params);
}

@NonNull
@Override
public Result doWork() {
    // Adding timestamp of background execution to firestore.
    Map<String, String> value = new TreeMap<>();
    SimpleDateFormat df = new SimpleDateFormat("hh:mm");
    String dateFormat = df.format(Calendar.getInstance().getTime());
    value.put("time", dateFormat);
    FirebaseFirestore.getInstance()
            .collection("my-collection")
            .add(value);
    return Result.SUCCESS;
}

}

Вот как я это называю:

PeriodicWorkRequest.Builder testBuilder =
    new PeriodicWorkRequest.Builder(TestWorker.class, 15,
                                    TimeUnit.MINUTES);

PeriodicWorkRequest testWork = testBuilder.build();
WorkManager.getInstance().enqueue(testWork);

Ответы [ 2 ]

0 голосов
/ 23 июля 2019

Я недавно работал с PeriodicWorkRequest и узнал, что Workmanager все еще находится в режиме Alpha / Beta в android.arch и имеет некоторые ошибки, которые еще не исправлены. Затем я просмотрел документацию по androidX ( this ), где выпущена стабильная версия, и она работает отлично, как и ожидалось. Основная проблема заключается в том, что вам нужно перенести свой проект на AndroidX.

Проще говоря, если вы используете "android.arch.work:work-runtime:1.x.x" , то никаких гарантий работы на данный момент нет (пока у нас не будет стабильной версии). Попробуйте с "androidx.work:work-runtime" , который точно будет работать.

Просмотрите документ для дальнейшего использования. это и это .

Примечание ::

Если вы хотите перенести свой проект на AndroidX. Выполните следующие действия,

Панель инструментов Android Studio (v3.4.1) -> Refactor -> Миграция на AndroidX

0 голосов
/ 15 ноября 2018

Вы можете начать с уникальной периодической работы, как показано ниже:

WorkManager.getInstance().enqueueUniquePeriodicWork(UNIQUE_ID, ExistingPeriodicWorkPolicy.REPLACE, testWork);

Здесь UNIQUE_ID - это Строка , которая проверит уникальность вашего работника изамените существующий, если он уже существует в очереди для периодической работы.

Ознакомьтесь с политиками рабочих здесь .

И не забудьте добавитьтот же тег для вашего рабочего экземпляра, например:

PeriodicWorkRequest.Builder testBuilder =
new PeriodicWorkRequest.Builder(TestWorker.class, 15, TimeUnit.MINUTES);
PeriodicWorkRequest testWork = testBuilder.addTag(UNIQUE_ID).build(); // Set the same string tag for worker.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...