Ограничения и планирование
Запускайте работу при правильных условиях
«Ограничения и планирование» — бесплатный урок Android Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Android Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Android Academy содержит 4 уроков всего.
Ограничения и планирование
Рабочий компонент определяет, что нужно сделать. WorkRequest определяет, когда и при каких условиях это произойдёт. Вы создаёте запрос, добавляете ограничения и помещаете его в очередь.
Что такое ограничения
Ограничения — это условия, которые должны выполняться до запуска работы, например наличие сетевого подключения или подключённого зарядного устройства. WorkManager ждёт, пока они будут выполнены.
Создание ограничений
Используйте Constraints.Builder, чтобы объявить требования.
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.UNMETERED)
.setRequiresCharging(true)
.build()Распространённые типы ограничений
Чаще всего используются следующие ограничения:
setRequiredNetworkType(CONNECTED, UNMETERED и другие);setRequiresCharging;setRequiresBatteryNotLow;setRequiresDeviceIdle;setRequiresStorageNotLow.
Создание OneTimeWorkRequest
Для работы, которая выполняется один раз, используйте OneTimeWorkRequestBuilder, указав класс рабочего компонента, и добавьте ограничения.
val request = OneTimeWorkRequestBuilder<UploadWorker>()
.setConstraints(constraints)
.build()Передача входных данных
Добавьте входные данные к запросу с помощью setInputData; рабочий компонент считывает их через inputData.
val request = OneTimeWorkRequestBuilder<UploadWorker>()
.setInputData(workDataOf("user_id" to "42"))
.setConstraints(constraints)
.build()Добавление работы в очередь
Получите экземпляр WorkManager и вызовите enqueue. WorkManager сохраняет запрос и запускает его, когда ограничения выполнены.
WorkManager.getInstance(context).enqueue(request)Политика задержки
Когда рабочий компонент возвращает retry(), WorkManager выжидает некоторое время перед повторным запуском. Настройте стратегию с помощью setBackoffCriteria, выбрав линейную или экспоненциальную задержку.
val request = OneTimeWorkRequestBuilder<UploadWorker>()
.setBackoffCriteria(
BackoffPolicy.EXPONENTIAL,
10, TimeUnit.SECONDS
)
.build()Уникальная работа
Чтобы не планировать повторяющиеся задания, используйте enqueueUniqueWork с именем и политикой конфликта (KEEP, REPLACE или APPEND).
WorkManager.getInstance(context).enqueueUniqueWork(
"sync_job",
ExistingWorkPolicy.KEEP,
request
)Наблюдение за состоянием работы
Наблюдать за состоянием запроса (ENQUEUED, RUNNING, SUCCEEDED, FAILED) можно через getWorkInfoByIdFlow или LiveData. Это удобно для отображения хода выполнения в интерфейсе.
WorkManager.getInstance(context)
.getWorkInfoByIdFlow(request.id)
.collect { info -> /* react to info.state */ }Добавление меток
Добавляйте к запросам метки с помощью addTag, чтобы позже находить или отменять связанные группы работ по метке, например сразу отменять все работы по «загрузке».
Быстрая проверка
Проверьте, насколько хорошо Вы поняли ограничения и планирование.
Итоги
Вы запланировали работу с ограничениями:
Constraints.Builderзадаёт такие условия, как наличие сети и зарядка;OneTimeWorkRequestBuilderсоздаёт запрос;enqueue/enqueueUniqueWorkдобавляют его в очередь;- Вы настроили задержку, наблюдение за состоянием и метки работы.
Далее: периодическая и связанная работа.
Часто задаваемые вопросы
Урок «Ограничения и планирование» бесплатный?
Да — полный текст урока «Ограничения и планирование» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Android Academy, подпишись на CoddyKit PRO. Курс Android Academy содержит 4 уроков всего.
Чему я научусь в уроке «Ограничения и планирование»?
Запускайте работу при правильных условиях Ты практикуешь Android Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Android Academy?
Предыдущий опыт не требуется. Android Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Ограничения и планирование»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Android Academy?
Да. Каждый урок Android Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Когда использовать WorkManager
- Создание Worker
- Ограничения и планирование
- Периодическая и связанная работа