0Pricing
Android Academy · Lección

Crear un Worker

Defina el trabajo en segundo plano en un Worker

Crear un Worker es una lección gratuita de Android Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Android Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Android Academy incluye 4 lecciones en total.

Crear un Worker

La unidad de trabajo en segundo plano de WorkManager es un Worker. Defina la tarea creando una subclase de una clase base de worker y sobrescribiendo su método de trabajo.

CoroutineWorker

Para Kotlin, extienda CoroutineWorker. Su función doWork() es una función suspend, por lo que puede llamar a otras funciones suspend y ejecutarse en un dispatcher de segundo plano de forma natural.

class UploadWorker(
    context: Context,
    params: WorkerParameters
) : CoroutineWorker(context, params) {
    override suspend fun doWork(): Result {
        // background work here
        return Result.success()
    }
}

El constructor

Cada worker recibe un Context y un WorkerParameters en su constructor, y los pasa a la superclase. WorkManager crea instancias de su worker automáticamente; nunca debe llamar al constructor directamente.

doWork devuelve un Result

doWork() debe devolver un Result que describa el resultado. Hay tres posibilidades.

  • Result.success()
  • Result.retry()
  • Result.failure()

Result.success

Devuelva Result.success() cuando el trabajo se haya completado. El trabajo se elimina de la cola. Puede adjuntar datos de salida para pasarlos a trabajos encadenados.

override suspend fun doWork(): Result {
    uploadLogs()
    return Result.success()
}

Result.retry

Devuelva Result.retry() si se produce un error transitorio, como un error temporal de red. WorkManager vuelve a ejecutar el worker más adelante según su política de espera progresiva.

override suspend fun doWork(): Result {
    return try {
        syncData()
        Result.success()
    } catch (e: IOException) {
        Result.retry()
    }
}

Result.failure

Devuelva Result.failure() si se produce un error permanente que no se solucionará reintentando, como una entrada no válida. El trabajo se detiene y los trabajos encadenados dependientes no se ejecutan.

Leer datos de entrada

Pase entradas pequeñas mediante Data al poner el trabajo en cola y léalas con inputData dentro del worker. Mantenga los datos en un tamaño reducido; no están pensados para cargas grandes.

override suspend fun doWork(): Result {
    val userId = inputData.getString("user_id") ?: return Result.failure()
    sync(userId)
    return Result.success()
}

Devolver datos de salida

Los workers pueden devolver Data en su resultado, que los workers encadenados reciben como entrada. Así es como se pasan resultados entre pasos.

val output = workDataOf("count" to 42)
return Result.success(output)

Trabajar con el dispatcher adecuado

CoroutineWorker ejecuta doWork() en Dispatchers.Default de forma predeterminada. Para realizar operaciones de E/S bloqueantes, cambie mediante withContext(Dispatchers.IO) para evitar saturar el grupo de hilos predeterminado.

override suspend fun doWork(): Result = withContext(Dispatchers.IO) {
    readAndUploadFile()
    Result.success()
}

Mantener los workers autocontenidos

Un worker puede ejecutarse mucho después de haber sido programado, en un proceso nuevo. No dependa del estado de la aplicación en memoria; pase lo que necesite mediante los datos de entrada o léalo del almacenamiento persistente.

Comprobación rápida

Compruebe cuánto ha entendido sobre la creación de un Worker.

Resumen

Ha creado un Worker:

  • Extienda CoroutineWorker y sobrescriba el doWork() suspend
  • Devuelva Result.success(), Result.retry() o Result.failure()
  • Lea inputData y devuelva Data de salida
  • Use Dispatchers.IO para el trabajo bloqueante y mantenga los workers autocontenidos

A continuación: restricciones y programación.

Preguntas frecuentes

¿La lección «Crear un Worker» es gratis?

Sí — el texto completo de «Crear un Worker» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Android Academy, actualiza a CoddyKit PRO. El curso de Android Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Crear un Worker»?

Defina el trabajo en segundo plano en un Worker Practicas Android Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Android Academy?

No se requiere experiencia previa. Android Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Crear un Worker»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Android Academy?

Sí. Cada lección de Android Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Cuándo usar WorkManager
  2. Crear un Worker
  3. Restricciones y programación
  4. Trabajo periódico y encadenado
← Volver a Android Academy