Android Work Manager - обеспечивает ли Work Manager на 100% завершение фонового выполнения?

Из того, что я прочитал в документации, https://developer.android.com/topic/libraries/architecture/workmanager,

В нем сказано:

Выполнение задачи по-прежнему гарантировано, даже если ваше приложение завершается принудительно или устройство перезагружается.

Итак, что означает, что выполнение, которое находится в фоновом режиме, будет выполняться на 100%, пока оно не завершится, несмотря ни на что?

В качестве примера:

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

Моя неопределенность:

Будет ли Диспетчер работ запускать процесс в фоновом режиме и продолжать ли повторные попытки даже при отсутствии подключения к Интернету? и только завершить и остановить процесс, пока не будет установлено подключение к Интернету, и не завершите загрузку данных?


person I am a Student    schedule 30.07.2018    source источник


Ответы (2)


Будет ли Диспетчер работ запускать процесс в фоновом режиме и продолжать повторять попытки, даже если нет подключения к Интернету? и только завершить и остановить процесс, пока не будет подключение к Интернету и не завершите загрузку данных?

Он не будет косвенно пытаться выполнять работу непрерывно и останавливаться только в том случае, если она была успешной. Это будет зависеть от результата, возвращенного doWork() или вашим Worker. Если он вернет RETRY, то работа будет повторена с отсрочкой, указанной в WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, long, TimeUnit).

Однако, если вам нужно что-то выполнить при наличии подключения к Интернету, вы можете указать соответствующие ограничения. Для подключения к сети вы можете установить следующие ограничения:

Constraints myConstraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build();

 OneTimeWorkRequest mywork=
            new OneTimeWorkRequest.Builder(MyWorker.class)
 .setConstraints(myConstraints)
 .build();
 WorkManager.getInstance().enqueue(mywork);

WorkManager обеспечит выполнение вашей работы только при наличии подключения к Интернету.

person Sagar    schedule 30.07.2018
comment
когда я объявляю это ограничение, менеджер по работе загружает не изображение, а мой мобильный телефон, подключенный к Wi-Fi. любая идея почему - person Hamza; 01.02.2019

Будет ли Диспетчер работ запускать процесс в фоновом режиме и продолжать повторять попытки, даже если нет подключения к Интернету? и только завершить и остановить процесс, пока не будет подключение к Интернету и не завершите загрузку данных?

Так как вы указали, что диспетчер работ требует подключения к сети.

val constraints = Constraints.Builder()
                            .setRequiredNetworkType(NetworkType.CONNECTED).build()

val workRequest = OneTimeWorkRequest.Builder(RequestWorker::class.java)
                            .setConstraints(constraints)
                            .build()

Рабочий запрос не будет инициирован до тех пор, пока не будет установлено сетевое соединение. Рассматривайте его как WorkManager, отслеживающий изменения в NetworkState, и как только сеть ПОДКЛЮЧЕНА, он начинает обработку вашего workRequest (doWork).

Я также должен добавить, что пока ваш телефон находится в режиме AirPlane и ваш телефон перезагружается с ожидающим рабочим запросом, я не думаю, что в настоящее время обработка рабочего запроса гарантированно начнется немедленно, как вы могли ожидать, даже когда состояние NetWork СОЕДИНЕНО.

person Paul Okeke    schedule 01.08.2018