Создание Worker
Определяйте фоновую работу в Worker
«Создание Worker» — бесплатный урок Android Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Android Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Android Academy содержит 4 уроков всего.
Создание рабочего компонента
Единицей фоновой работы в WorkManager является рабочий компонент. Задачу определяют, создавая подкласс базового класса рабочего компонента и переопределяя его метод работы.
CoroutineWorker
В Kotlin расширьте CoroutineWorker. Его doWork() — это функция suspend, поэтому Вы можете вызывать другие приостанавливаемые функции и естественным образом выполнять работу в фоновом диспетчере.
class UploadWorker(
context: Context,
params: WorkerParameters
) : CoroutineWorker(context, params) {
override suspend fun doWork(): Result {
// background work here
return Result.success()
}
}Конструктор
Каждый рабочий компонент принимает в конструкторе Context и WorkerParameters и передаёт их суперклассу. WorkManager создаёт экземпляр рабочего компонента за Вас; напрямую вызывать конструктор не нужно.
doWork возвращает результат
doWork() должен возвращать Result, описывающий результат выполнения. Возможны три варианта.
Result.success()Result.retry()Result.failure()
Result.success
Возвращайте Result.success(), когда работа завершена. Работа удаляется из очереди. При необходимости можно прикрепить выходные данные, чтобы передать их следующей связанной работе.
override suspend fun doWork(): Result {
uploadLogs()
return Result.success()
}Result.retry
Возвращайте Result.retry() при временной ошибке, например при неполадке сети, которая скоро может исчезнуть. WorkManager повторно запустит рабочий компонент позже в соответствии с политикой задержки.
override suspend fun doWork(): Result {
return try {
syncData()
Result.success()
} catch (e: IOException) {
Result.retry()
}
}Result.failure
Возвращайте Result.failure() при постоянной ошибке, которую повторный запуск не исправит, например при недопустимых входных данных. Работа прекращается, а зависящие от неё связанные задачи не запускаются.
Чтение входных данных
Небольшие входные данные передаются через Data при добавлении работы в очередь, а внутри рабочего компонента считываются с помощью inputData. Объём данных должен быть небольшим: этот механизм не предназначен для крупных наборов данных.
override suspend fun doWork(): Result {
val userId = inputData.getString("user_id") ?: return Result.failure()
sync(userId)
return Result.success()
}Возврат выходных данных
Рабочие компоненты могут возвращать Data в своём результате, и связанные с ними рабочие компоненты получают эти данные как входные. Так передаются результаты между этапами.
val output = workDataOf("count" to 42)
return Result.success(output)Работа в подходящем диспетчере
CoroutineWorker по умолчанию выполняет doWork() в Dispatchers.Default. Для блокирующих операций ввода-вывода переключайтесь с помощью withContext(Dispatchers.IO), чтобы не перегружать стандартный пул.
override suspend fun doWork(): Result = withContext(Dispatchers.IO) {
readAndUploadFile()
Result.success()
}Рабочие компоненты должны быть автономными
Рабочий компонент может запуститься спустя долгое время после планирования и в новом процессе. Не полагайтесь на состояние приложения в памяти: передавайте необходимые данные через входные данные или считывайте их из постоянного хранилища.
Быстрая проверка
Проверьте, насколько хорошо Вы поняли создание рабочего компонента.
Итоги
Вы создали рабочий компонент:
- расширили
CoroutineWorkerи переопределили приостанавливаемую функциюdoWork(); - возвращали
Result.success(),Result.retry()илиResult.failure(); - считывали
inputDataи возвращали выходные данныеData; - использовали
Dispatchers.IOдля блокирующей работы и сделали рабочие компоненты автономными.
Далее: ограничения и планирование.
Часто задаваемые вопросы
Урок «Создание Worker» бесплатный?
Да — полный текст урока «Создание Worker» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Android Academy, подпишись на CoddyKit PRO. Курс Android Academy содержит 4 уроков всего.
Чему я научусь в уроке «Создание Worker»?
Определяйте фоновую работу в Worker Ты практикуешь Android Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Android Academy?
Предыдущий опыт не требуется. Android Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Создание Worker»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Android Academy?
Да. Каждый урок Android Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Когда использовать WorkManager
- Создание Worker
- Ограничения и планирование
- Периодическая и связанная работа