ОАО «Российская Авиакомпания ЭРЛЕН»

Russian Airlines Company "Airlen"

Ваш внешний IP: 18.191.234.153

Запуск фоновых задач в Android с помощью WorkManager: часть 2

Предыдущая статья из этой серии:Запуск фоновых задач в Android с помощью WorkManager: часть 1

Ограничение запуска задачи

WorkManager позволяет нам установить ограничение для запуска задачи. Например, рассматриваемой задачей может быть проверка наличия на устройстве интернет-сервиса. Когда вы передаете такую ​​задачу WorkManager.enqueue, она проверит наличие интернет-соединения. Если соединение есть, то задание запустится. А если нет, то задача будет висеть в статусе ENQUEUED до появления интернета.

Если задача запущена и по какой-то причине пропал интернет, задача будет остановлена ​​и запланирована заново (В ОЧЕРЕДИ).

Давайте посмотрим, какое ограничение мы можем установить.

Например, мы будем использовать такую ​​задачу.

class WorkManager (context: Context, parameters: WorkerParameters) : Worker(context, parameters) {  

    private val TAG = this.javaClass.simpleName  

    override fun doWork(): Result {  

        Log.d(TAG, "doWork: start")  

        try {  

            (0 .. 10).forEach {  

                TimeUnit.SECONDS.sleep(10)  

                Log.d(TAG, "${it}, isStopped: $isStopped")  

                if (isStopped)  

                    return Result.failure()  

            }  

        } catch (e: InterruptedException) {  

            e.printStackTrace()  

        }  

        Log.d(TAG, "doWork: end")  

        return Result.success()  

    }  

    override fun onStopped() {  

        super.onStopped()  

        Log.d(TAG, "onStopped: ")  

    }  

}

Цикл 10 пауз и журнал isStoppedсостояния. Если задача была остановлена, то выйти со статусом FAILURE.

Мы также регистрируем onStoppedметод.

В действии приведенный ниже код используется для отслеживания состояния задачи:

WorkManager.getInstance(this)  

    .getWorkInfoByIdLiveData(workRequest.id)  

    .observe(this) { workInfo ->  

        Log.d(TAG, "onChanged: " + workInfo.state)  

    }

setRequiresCharging (логическое значение требует зарядки)

Ограничение: Зарядное устройство должно быть подключено.

Код для добавления ограничения выглядит так :

val constraints = Constraints.Builder()  

    .setRequiresCharging(true)  

    .build()  

val workRequest: WorkRequest = OneTimeWorkRequestBuilder<MyWorker>()  

    .setConstraints(constraints)  

    .build()

В Constraints.Builder, мы включаем критерий setRequiresCharging, создаем объект Constraints и передаем его OneTimeWorkRequest.Builderв setConstraintsметод.

setRequiresBatteryNotLow (логическое значение требуетBatteryNotLow)

Ограничение: уровень заряда батареи не ниже критического.

setRequiredNetworkType (сетевой тип сети)

Ограничение: наличие интернета.

Мы можем указать, какой тип интернет-сети (NetworkType) следует использовать при запуске задачи:

ПОДКЛЮЧЕНО – Wi-Fi или мобильные данные НЕ ИЗМЕРЯЮТСЯ – только Wi-Fi ИЗМЕРЯЕТСЯ – только мобильные данные NOT_ROAMING – Интернет не должен находиться в роуминге NOT_REQUIRED – Интернет не требуется

setRequiresDeviceIdle (логическое значение requireDeviceIdle)

Ограничение: устройство некоторое время не использовалось и перешло в спящий режим. Работает на API 23 и выше.

setRequiresStorageNotLow (логическое значение требуетStorageNotLow)

Ограничение: на устройстве должно быть свободное место, не меньше критического порога.

addContentUriTrigger(Uri uri, boolean triggerForDescendants)

UriОграничение: задача будет выполняться при обновлении содержимого указанного . Работает на API 24 и выше.

Для одной задачи можно установить сразу несколько ограничений.

Запуск фоновых задач в Android с помощью WorkManager: часть 2
Запуск фоновых задач в Android с помощью WorkManager: часть 2
Декабрь 2024
Пн Вт Ср Чт Пт Сб Вс
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

Сервер: 21.12.2024 05:12