Проблема с Android WorkManager PeriodicWorkRequest не запускается после закрытия приложения

Я пытаюсь перейти с диспетчера заданий Firebase на диспетчер работы AndroidX. Мое приложение хорошо работало с Job Dispatcher. Проблема с диспетчером работ заключается в том, что он не выполняет периодическую работу после закрытия приложения. Без выполнения Периодической работы пользователи не могут получать уведомления.

Мое приложение тестируется на нескольких эмуляторах пикселей (например, SDK уровня 30), запускаемых из Android Studio. Я ожидал от этих эмуляторов стандартного поведения Android. Я также тестировал с использованием физических телефонов и получил ту же проблему.

Я искал решение, но пока безуспешно. Не могли бы вы помочь определить причину и решение?

Вот мой код Java:

    Constraints constraints = new Constraints.Builder()
            .setRequiredNetworkType(NetworkType.CONNECTED)
            .build();

    PeriodicWorkRequest periodicWorkRequest = new PeriodicWorkRequest.Builder(MyClass.class, 15, TimeUnit.MINUTES)
            .addTag("my_tag")
            .setConstraints(constraints)
            .setInitialDelay(15, TimeUnit.MINUTES)
            .build();

    WorkManager.getInstance(appContext)
            .enqueueUniquePeriodicWork("my_unique_work_name", ExistingPeriodicWorkPolicy.REPLACE, periodicWorkRequest);

    Log.d ( "From Work scheduling procedure...", "periodicWorkRequest enqueued" );

Вот моя конфигурация в build.gradle (уровень приложения)

    implementation 'androidx.work:work-runtime:2.4.0'

person autumnmaple    schedule 09.08.2020    source источник


Ответы (1)


Я искал ответ более суток и получил его, проведя множество раундов проб и ошибок. Проблема не в моей программе, а в конкретном поведении Logcat.

После того, как я закрыл свое приложение на эмуляторе, я заметил, что в раскрывающемся меню процессов Logcat отображается Нет отлаживаемых процессов. Это была причина, по которой я не мог видеть свои сообщения отладки или связанные сообщения о периодической работе в журнале. Когда я повторно запустил приложение, мое приложение снова появилось как отлаживаемый процесс в раскрывающемся меню, и все элементы периодической работы, выполненные ранее, появились в Logcat.

Для телефона, который я тестировал, после того, как я закрыл на нем свое приложение при подключенном USB-кабеле, я заметил, что в раскрывающемся меню процессов Logcat оставалось мое приложение в качестве отлаживаемого процесса. Я стал терпеливее ждать и наблюдать. Появились мои отладочные сообщения для периодической работы.

Мои элементы периодической работы фактически выполнялись на моих эмуляторах и телефонах. Я не видел журналов в Logcat и предполагал, что моя программа работает некорректно. Моя программа работала хорошо, но я недостаточно разбирался в Logcat.

Когда искал ответ, я сталкивался с множеством похожих вопросов. Надеюсь, мой ответ поможет некоторым из вас сэкономить время.

Раскрывающиеся меню Logcat

person autumnmaple    schedule 10.08.2020
comment
Но устройство убивает, в моем случае я должен использовать <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/> и auto start, тогда он работает, так что мне нужно делать? - person prototype86; 27.10.2020
comment
Я тоже использую эту версию 2.4.0 - person prototype86; 27.10.2020
comment
В моем случае я убедился, что раскрывающееся меню эмулятора в Logcat было выбрано с подключенным эмулятором. Я повторно запустил свое приложение в эмуляторе. Затем в раскрывающемся меню отлаживаемых процессов появилось имя моего пакета приложения. При правильном подключении и эмулятора, и приложения Logcat отображал мои отладочные сообщения Log.d для WorkManager. - person autumnmaple; 28.10.2020