Сервис в Орео - PullRequest
       10

Сервис в Орео

0 голосов
/ 25 сентября 2018

Я работаю над приложением ( minSDK = 19 & targetSDK = 26 ), в котором есть 20 служб, например, таких как MediaPlayer, SyncUpData, SyncDownData и т. Д. Как Android O не позволяет долго работать фоновым сервисам.Я совершенно сбит с толку тем, что выбрать между JobScheduler, FirebaseJobDispature, JobIntentService и т. Д., Потому что JobShecduler представлен в API 21 и FirebaseJobDispature в API 14.

Другой вопрос - как проверить, какие службы необходимо заменить на приведенные выше?Framework и которые не являются.

Есть 3 службы, которые должны быть запущены, даже если приложение не видно, потому что эти службы отправляют / получают пакеты данных на / с устройства Bluetooth.Они перестанут работать либо при уничтожении приложения, либо вручную отключат соединение.

Я знаю, что есть много решений в сети, но я запутался, какое мне следует использовать.

Пожалуйста, предложите подходящее решение дляэтот.ТИА

1 Ответ

0 голосов
/ 25 сентября 2018

Лучше всего использовать новую библиотеку WorkManager .Он охватывает все возможные сценарии уровня API:

  • Использует JobScheduler для API 23+
  • Для API 14-22 При использовании Firebase JobDispatcher в приложении и необязательной зависимости Firebase, использует Firebase JobDispatcher
  • В противном случае использует пользовательскую реализацию AlarmManager + BroadcastReceiver

Кроме того, здесь некоторые литературные источники и примеры использования для него.

Вариант использования WorkManager предназначен только для фоновых заданий, требующих гарантированного выполнения, даже после того, как приложение будет убито.

Если вместо этого вам нужен сервис Foreground, то просто создать его самостоятельно, расширив класс Service .Для Oreo вам нужно будет показать уведомление пользователя.Затем служба может быть запущена в качестве переднего плана с помощью следующего вызова:

ContextCompat.startForegroundService(context, yourService);

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

Цитата из документации Android:

Если вам нужно выполнить работу вне основного потока, но только в то время, покапользователь взаимодействует с вашим приложением, тогда вам, вероятно, следует вместо этого создать новый поток, а не службу.Например, если вы хотите воспроизвести какую-то музыку, но только во время работы, вы можете создать поток в onCreate (), запустить его в onStart (), а затем остановить в onStop ().Также рассмотрите возможность использования AsyncTask или HandlerThread вместо традиционного класса Thread.Посмотрите документ Процессы и Потоки для получения дополнительной информации о потоках.

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

...