Найти в Дзене

WorkManager. Плюсы и минусы. Часть 1.

Довольно часто случается, что нам нужно сделать какую-то фоновую работу в приложении. Например, отправить логи или какие-то метрики на сервер, обновить данные в базе или сделать что-то ещё, что не требует присутствия пользователя. В этом случае, если действие будет длиться меньше 10 минут и не требует запуска прям в определенное время с точностью до минут, то нам идеально подойдет WorkManager. Если нужно запускать в определенное время, то больше подойдет AlarmManager. Какие есть преимущества у WorkManager: Недостатки: Другие недостатки я не смогла найти. Вероятно, они есть. Но преимущества точно всё перекрывают. Дубль статей в телеграмме — https://t.me/android_junior Мои заметки в телеграмме — https://t.me/android_junior_notes

Довольно часто случается, что нам нужно сделать какую-то фоновую работу в приложении. Например, отправить логи или какие-то метрики на сервер, обновить данные в базе или сделать что-то ещё, что не требует присутствия пользователя. В этом случае, если действие будет длиться меньше 10 минут и не требует запуска прям в определенное время с точностью до минут, то нам идеально подойдет WorkManager. Если нужно запускать в определенное время, то больше подойдет AlarmManager.

Какие есть преимущества у WorkManager:

  • API 14+. Это значит, что на устройствах выше android 4.0 наша фоновая задача выполнится. Правда приложений, которые поддерживают аж андроид 4.0 мало, но определенно плюс.
  • Поддержка RxJava и Coroutines. WorkManager подойдет и любителям Java и любителям котлина и даже тем, у кого много легаси с RX.
  • Тут есть Constraints. Я расскажу про них чуть позже, но они помогают создать условия для запуска WorkManager. Например, мы можем сделать так, чтобы он запускался только когда телефон находится на зарядке. Не будь Constraint, то батарея расходовалась бы слишком быстро.
  • Можно запустить последовательно, параллельно, один или много раз.
  • Все запланированные/выполняющиеся задачки хранятся в SQLite. Это значит, что если телефон выключится, то задачи потом будут перезапущены. Мы можем посмотреть их через Database Inspector внутри Android Studio (но помним, что он работает от API 26+ (Android 8.0)).
  • Возможно unit-тестирование с помощью TestWorkerBuilder. Это прям огромный плюс. Не каждый фоновый компонент может таким похвастаться.
  • Есть хорошие варианты для дебага: https://developer.android.com/topic/libraries/architecture/workmanager/how-to/debugging

Недостатки:

  • Задача должна быть выполнена за 10 минут, иначе WorkManager будет остановлен системой.
  • Если мы запускаем периодический воркер, то минимальный интервал должен быть 15 минут. Но это стандартные фоновые ограничения.
  • Есть несколько типов воркеров и надо понять чем они отличаются и какой когда лучше использовать.

Другие недостатки я не смогла найти. Вероятно, они есть. Но преимущества точно всё перекрывают.

Дубль статей в телеграмме — https://t.me/android_junior

Мои заметки в телеграмме — https://t.me/android_junior_notes