Диспетчер работ в версиях Android ниже OREO

Я использую Диспетчер работ в своем приложении. Он ставит в очередь такую ​​работу:

fun makeNotificationRequest() {

    val notificationWork = OneTimeWorkRequest.Builder(NotificationWorker::class.java)
            .setInitialDelay(5, TimeUnit.SECONDS)
            .addTag(NOTIFICATION_TAG)
            .build()
    WorkManager.getInstance().enqueue(notificationWork)
}

Вот мой рабочий класс:

class NotificationWorker : Worker() {

    override fun doWork(): Result {
        makeNotification()
        return Worker.Result.SUCCESS
}}

В Android API OREO и выше, даже если приложение убито, срабатывает мое уведомление. Но если API ниже OREO - уведомление не сработает в убитом приложении. Что мне делать, чтобы получать уведомление в старых версиях Android? Или Worker работает только в OREO и выше? Спасибо!


person Вова Медведев    schedule 14.08.2018    source источник


Ответы (1)


Worker Manager обратно совместим до API 19.

Worker Manager зависит от OEM (он все еще находится в бета-версии). Если на некоторых устройствах включена расширенная оптимизация, менеджер работы также не запускается, когда приложение не запущено. Чтобы решить эту проблему, можно использовать JobIntentService для устройств ниже Oreo и диспетчера рабочих процессов для устройств Oreo и выше (проблема все равно будет сохраняться, если для этих устройств включена расширенная оптимизация).

Или вы можете предложить пользователю отказаться от оптимизации вашего приложения.

person Suhas Ts    schedule 14.08.2018