Пределы фонового выполнения в Oreo

Привет всем гикам Android!

Я разрабатываю приложение для Android, ориентированное на Android Oreo (O).

    minSdkVersion 21
    targetSdkVersion 27

Я знаю, что существуют ограничения для запуска фоновых служб, и я могу их преодолеть, используя метод обслуживания startForeground(...).

Мое сомнение есть; Должен ли я использовать этот метод startForeground(...) для всех версий Android? Поскольку при вызове этого метода будет отображаться уведомление, я бы по возможности избегал его в версиях до Oreo.

Итак, чтобы избежать отображения уведомлений на устройствах до Oreo, могу ли я использовать приведенный ниже фрагмент кода? Будет ли он работать в фоновом режиме как до, так и после Oreo?

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O /* 26 */) {
        // Make the service as foreground service by calling startForeground method
    } else {
        // Nothing to do
    }

Подводя итог моему вопросу:

  • targetSdkVersion 27 и minSdkVersion 21
  • MyService должен работать в фоновом режиме в обеих версиях ОС pre Oreo и пост Oreo.
  • Можно ли ограничить использование startForeground(...) только для версии ОС пост Oreo

Да, это нормально для этого. Он будет работать в фоновом режиме на устройствах pre-oreo, но если пользователь убьет ваше приложение, служба также умрет, если вы не используете startForeground для pre-oreo.

HedeH 05.09.2018 11:51

См. Пределы фонового выполнения

RonTLV 05.09.2018 12:44

@HedeH, спасибо за ответ ... Не могли бы вы опубликовать его в качестве ответа, чтобы я мог принять его. :)

Midhu 24.09.2018 07:31
0
3
239
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

MyService should run in the background in both pre Oreo and post Oreo OS versions. Is it okay to limit the usage of startForeground(...) for only post Oreo OS version?

Да, это нормально для этого.

Service будет работать в фоновом режиме на устройствах pre-oreo, но если пользователь убьет ваше приложение, Service также умрет, если вы не используете startForeground для pre-oreo.

Спасибо за ответ @HedeH (Y)

Midhu 25.09.2018 16:06

WorkManager предназначен для задач, требующих гарантии того, что система будет их запускать, даже если приложение завершит работу. Запуск на переднем плане выглядит хорошо, когда ваш вариант использования также требует уведомления, например: резервное копирование, навигация, обновления местоположения. Такой передний план запуска операции подходит как нельзя лучше. Но есть и другие случаи, когда он не должен показывать уведомление. Кроме того, его следует использовать всегда, когда задача откладывается.

WorkManager uses an underlying job dispatching service when available based on the following criteria: Uses JobScheduler for API 23+ Uses a custom AlarmManager + BroadcastReceiver implementation for API 14-22

ссылка для получения дополнительной информации https://developer.android.com/reference/androidx/work/WorkManager?hl=en

Другие вопросы по теме