Должен ли WorkManager использоваться с SyncAdapter?

Ранее можно было обеспечить серию обновлений, используя IntentService или SyncAdapter с WakeLock.

Теперь с новым режимом Doze и ограничениями для экономии заряда батареи WakeLock все еще достаточно надежен или следует запускать более длинные процессы в IntentService или SyncAdapter с использованием WorkManager?

Также готов ли WorkManager API к производству?

2 ответа

Решение

Насколько я понимаю, WorkManager может заменить IntentService а также SyncAdapter полностью. Например, все, что вы делаете в SyncAdapter.onPerformSync() теперь может быть в WorkManager.doWork(),

И это все еще в альфа-фазе (в настоящее время 1.0.0-alpha02): https://developer.android.com/topic/libraries/architecture/adding-components

Что касается пробуждения замков: В Android 8.0 есть следующие изменения:

В качестве одного из изменений, которые вносит Android 8.0 (уровень API 26), чтобы увеличить время автономной работы, когда ваше приложение переходит в состояние кэширования без активных компонентов, система освобождает любые wakelocks, которые удерживает приложение.

Так что я бы не стал больше полагаться на вейк-лок. Я думаю, что они будут полностью удалены в будущих версиях Android. И в большинстве случаев они вам не нужны WorkManager,

Я бы не стал использовать JobScheduler или AlarmManager. WorkManager работает поверх них и обрабатывает все за вас, не имеет значения, на какой версии Android работает ваше приложение.

https://codelabs.developers.google.com/codelabs/android-workmanager Вот хороший пример WorkManager, где они используют Worker для обработки изображений, но это прекрасно для выполнения длительных задач. Вы можете указать ограничения на различные вещи, в том числе, если вы хотите, чтобы устройство не использовалось для запуска работника. Вы также можете связать работников в цепочку, передать данные от одного к другому, даже сгруппировать их и выполнить несколько параллелей, дождаться завершения всех и затем продолжить работу с другим (или более) работниками. В зависимости от вашего варианта использования, вы можете в основном запустить работника из любого места (активность, широковещательный приемник, STC).

На самом деле, я использую работников, запущенных с широковещательного приемника, для выполнения некоторых вызовов API, только если у вас, конечно, есть подключение к Интернету (настраиваемое ограничение), и его так легко настроить и работает так хорошо, я могу только рекомендовать его использовать (и благословить Google, наконец, для создания этих библиотек переменного тока). Мне также очень нравится тот факт, что WorkManager сохраняет работы в БД с комнатой, поэтому он может забрать его, когда все условия проверяются, даже если вы перезапускаете устройство между ними. Если у вас настроен мониторинг (например, stetho), вы можете увидеть, как он сохраняет задания в своей собственной базе данных.

Он все еще в альфа-версии, но он настолько прочный, что я не думаю, что они сильно изменятся, пока не выпустят финальную версию.

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