Ваш IP: 18.97.14.87






    Запуск фоновых задач в 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 и выше.

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

    реагировать на историю с копией
    отнеситесь к истории с душой