Следует ли использовать WorkManager с SyncAdapter?

Раньше можно было гарантировать серию обновлений с помощью IntentService или SyncAdapter с WakeLock.

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

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


person dave08    schedule 06.06.2018    source источник


Ответы (2)


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

Он получил стабильную версию 2.4.0 и готов к производству.

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

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

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

person mbo    schedule 06.06.2018
comment
Есть ли шанс, что Android прервет одну из работ посередине? Блокировки пробуждения были сделаны, чтобы гарантировать отсутствие прерывания, если WorkManager можно прервать, задания нужно будет разделить на гораздо более мелкие части и выполнить проверки, чтобы избежать повреждения ... - person dave08; 06.06.2018
comment
Всегда есть вероятность, что устройство выключено или что-то подобное, но WorkManager предназначен для выполнения длительных задач, таких как загрузка и перезапуск задач, если они были прерваны. В документации указано: WorkManager предназначен для задач, требующих гарантии того, что система будет их запускать, даже если приложение завершится, например, загрузка данных приложения на сервер. - person mbo; 07.06.2018

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

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

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

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

person Drusantia    schedule 06.06.2018
comment
Вы используете это в производстве? - person dave08; 06.06.2018
comment
Нет, но держу пари, что на полпути приложение будет готово, окончательная версия будет выпущена и только минимальная, если потребуются какие-либо изменения. По крайней мере, это мое предположение, потому что он выглядит довольно солидно. - person Drusantia; 06.06.2018