Course Content
-
WorkManager для управления фоновыми задачами
- Категории фоновых задач
- Зачем нужен WorkManager?
- Для каких задач подходит WorkManager?
- Описание проекта – Геотрекер
- Анатомия WorkManager. Основные классы
- Создание проекта и добавление необходимых зависимостей
- Создание простой БД на базе Room для хранения координат
- Просмотр информации в БД с помощью Flipper
- Пример разового выполнения WorkManager используя OneTimeWorkRequest
- Критерии выполнения задачи: наличие Wi-Fi, достаточный заряд батареи и другие
- Политики разрешения конфликтов для фоновых задач и режимы повторения
- Получаем координаты через FusedLocationProviderClient
- Сохраняем координаты в базу данных Room
- Запускаем геотрекер раз в 15 минут с помощью PeriodicWorkRequest
- Полезные ссылки и материалы
Категории фоновых задач
В этом мини-уроке мы рассмотрим различные категории фоновых задач, чтобы определить какие инструменты лучше всего подходят для той или иной задачи. Для для начала, вспомним, что такое фоновая задача. Задачей в фоне или background-задачей называется логика, относящаяся к приложению, но выполняющаяся не в главном (UI) потоке. Часто, необходимость запустить фоновую задачу возникает, если нужно выполнить какую-то ресурсоёмкую задачу, например, применение фильтров к картинке, или задачу которая отправляет файлы на сервер. Кроме того, могут возникнуть задачи, когда пользователь не взаимодействует с приложением напрямую, однако нужно выполнить запрос в сеть или собрать какие-то данные, например приложение-навигатор или геотрекер для курьера.
Типы background – задач
На данном графике отображены разные категории фоновых задач:
Вертикальная ось отображает время, требуемое для выполнения задачи: точное время (exact timing) или отложенное.
Горизонтальная ось представляет критерий точности выполнения задачи: гарантированное выполнение (Guaranteed Execution) или лучшая попытка (Best-Effort)
Таким образом получаем следующие категории фоновых задач:
- Задачи, которые нужно выполнить в точное время, чаще всего прямо сейчас (запросы в сеть) для них подойдут: ThreadPools, RxJava, coroutines.
- Задачи, которые нужно выполнить в точное время и они должны гарантированно выполниться, для таких задач можно использовать ForegroundService.
- Отложенные задачи с гарантированным выполнением, для них подойдут: JobScheduler, Firebase JobDispatcher, and Alarm Manager + Broadcast receivers.
- Задачи, которые нужно отложить но с гарантированным выполнением, для таких задач можно использовать WorkManager