Trabajo persistente Parte de Android Jetpack.
El trabajo es persistente cuando permanece programado a través de reinicios de la app y del sistema. reinicios. WorkManager es la solución recomendada para el trabajo persistente. Debido a que la mayor parte del procesamiento en segundo plano se logra mejor mediante trabajo persistente, Por lo tanto, WorkManager también es la principal API recomendada para el uso en segundo plano. el procesamiento de datos en general.
Tipos de trabajo persistente
WorkManager controla tres tipos de trabajos persistentes:
- Inmediatas: Tareas que deben comenzar de inmediato y completarse pronto. Se puede acelerar.
- Larga duración: Tareas que podrían ejecutarse durante más tiempo, posiblemente más de 10 minutos.
- Diferible: Tareas programadas que comienzan más tarde y pueden ejecutarse de forma periódica.
En la Figura 1, se describe cómo se relacionan los diferentes tipos de trabajos persistentes entre sí.
De manera similar, en la siguiente tabla se describen los distintos tipos de trabajo.
Tipo | Periodicidad: | Cómo acceder |
---|---|---|
Inmediatez | Una vez | OneTimeWorkRequest y Worker . Para el trabajo acelerado, llama a setExpedited() en tu OneTimeWorkRequest. |
Larga duración | Una vez o periódicamente | Cualquier WorkRequest o Worker . Llama a setForeground() en el trabajador para controlar la notificación. |
Diferible | Una vez o periódicamente | PeriodicWorkRequest y Worker . |
Si deseas obtener más información para configurar WorkManager, consulta la guía sobre cómo definir tus WorkRequests.
Funciones de WorkManager
Además de brindar una API más simple y coherente, WorkManager tiene otros beneficios clave, como:
Restricciones de trabajos
Mediante las restricciones de trabajo, define de manera declarativa las condiciones óptimas que necesita tu trabajo para ejecutarse. Por ejemplo, solo se debe ejecutar cuando el dispositivo se encuentra en una red no medida, cuando el dispositivo está inactivo o cuando tiene suficiente batería.
Programación sólida
WorkManager te permite programar un trabajo para que se ejecute una sola vez o periódicamente con ventanas de programación flexibles. También puedes etiquetar los trabajos y asignarles un nombre, lo que te permitirá programar trabajos únicos y reemplazables, así como supervisar o cancelar grupos de trabajo en forma conjunta.
El trabajo programado se almacena en una base de datos SQLite administrada de forma interna, y WorkManager se encarga de garantizar que ese trabajo se conserve y se reprograme después de todos los reinicios del dispositivo.
Además, WorkManager cumple con las funciones de ahorro de energía y las prácticas recomendadas, como el modo Descanso, para que no tengas que preocuparte por eso.
Trabajo acelerado
Puedes usar WorkManager para programar trabajos inmediatos que se ejecutarán en segundo plano. Debes usar Trabajo acelerado para tareas que son importantes para el usuario y que se completan en pocos minutos.
Política de reintento flexible
A veces, se producen errores en el trabajo. WorkManager ofrece políticas de reintento flexibles que incluyen una política de retirada exponencial configurable.
Encadenamiento de trabajos
Si tienes trabajos complejos que están relacionados, encadena las tareas de trabajo individuales mediante una interfaz intuitiva que te permite controlar qué partes se ejecutan de forma secuencial y cuáles en paralelo.
val continuation = WorkManager.getInstance(context)
.beginUniqueWork(
Constants.IMAGE_MANIPULATION_WORK_NAME,
ExistingWorkPolicy.REPLACE,
OneTimeWorkRequest.from(CleanupWorker::class.java)
).then(OneTimeWorkRequest.from(WaterColorFilterWorker::class.java))
.then(OneTimeWorkRequest.from(GrayScaleFilterWorker::class.java))
.then(OneTimeWorkRequest.from(BlurEffectFilterWorker::class.java))
.then(
if (save) {
workRequest<SaveImageToGalleryWorker>(tag = Constants.TAG_OUTPUT)
} else /* upload */ {
workRequest<UploadWorker>(tag = Constants.TAG_OUTPUT)
}
)
WorkManager.getInstance(...)
.beginWith(Arrays.asList(workA, workB))
.then(workC)
.enqueue();
Para cada tarea de trabajo, puedes definir datos de entrada y salida. Si encadenas los trabajos, WorkManager pasa automáticamente los resultados de una tarea de trabajo a la siguiente.
Interoperabilidad de subprocesos integrada
WorkManager se integra sin problemas con Corrutinas y RxJava, y brinda la flexibilidad de conectar tus propias APIs asíncronas.
Usa WorkManager para trabajos confiables
WorkManager está diseñado para trabajos que se requieren para ejecutarse de manera confiable incluso si el usuario sale de la pantalla, la app se cierra o el dispositivo se reinicia. Por ejemplo:
- Envío de registros o análisis a servicios de backend.
- Sincronización periódica de los datos de la app con un servidor.
WorkManager no está diseñado para el trabajo en segundo plano durante el proceso, que puede finalizar de manera segura si el proceso de la app desaparece. Tampoco es una solución general para todo el trabajo que requiera una ejecución inmediata. Revisa la guía de procesamiento en segundo plano para ver qué solución satisface tus necesidades.
Relación con otras APIs
Si bien las corrutinas son la solución recomendada para ciertos casos de uso, no debes usarlas para trabajos persistentes. Es importante tener en cuenta que las corrutinas es un framework de simultaneidad, mientras que WorkManager es una biblioteca de el trabajo. Asimismo, debes usar AlarmManager solo para relojes o calendarios.
API | Recomendado para | Relación con WorkManager |
---|---|---|
Corrutinas | Todo el trabajo asíncrono que no necesita ser persistente. | Las corrutinas son el medio estándar para dejar el subproceso principal en Kotlin. Sin embargo, dejan memoria cuando la app se cierra. Para trabajos persistentes, usa WorkManager. |
AlarmManager | Solo alarmas. | A diferencia de WorkManager, AlarmManager activa un dispositivo en modo Descanso. Por lo tanto, no es eficiente en términos de energía y administración de recursos. Úsalo solo para alarmas o notificaciones precisas, como eventos de calendario, no para el trabajo en segundo plano. |
Cómo reemplazar las APIs obsoletas
La API de WorkManager es el reemplazo recomendado para todas las versiones anteriores de Android.
APIs de programación en segundo plano, como FirebaseJobDispatcher
,
GcmNetworkManager
y JobScheduler
.
Comenzar
Consulta la Guía de introducción para comenzar a usar WorkManager en tu app.
Recursos adicionales
En las siguientes secciones, se proporcionan algunos recursos adicionales.
Videos
- Serie de videos Workmanager: MAD Skills
- Cómo trabajar con WorkManager de Android Dev Summit 2018
- WorkManager: Conceptos más avanzados, de Android Dev 2019 Cima
Blogs
Ejemplos
Aprende a usar la API de Activity Recognition Transition para crear funciones contextuales potentes en tu app En este codelab, aprenderás a convertir código de Java a Kotlin En este codelab, compilarás una app para Android con ML Kit que usa el aprendizaje automático integrado en el dispositivo para reconocer, identificar el idioma y traducir texto de entre 59 idiomas. También aprenderás a integrar la biblioteca de CameraX para realizar estas tareas desde un feed de cámara en tiempo real. En este codelab, comenzarás con un juego sencillo de simulación de física en 3D y, luego, integrarás funciones de adaptabilidad en él. Integrarás lo siguiente: En este codelab, se muestra cómo mejorar el tiempo de inicio y la latencia de fotogramas de la app con perfiles de Baseline. Obtén información sobre cómo agregar diseños adaptables a una app para Android basada en vistas con Jetpack Compose. En este codelab, agregarás la API de Play Integrity a una aplicación de ejemplo. Usarás la API de Play Integrity para solicitar un veredicto de integridad que te ayude a tomar decisiones sobre el estado de la licencia y la integridad de tu app, y el estado de integridad del dispositivo en el que se ejecuta. En este codelab, crearás una app para Android en la que se enumera un conjunto de restaurantes. Su objetivo es ayudarte a diseñar, configurar y verificar Android App Links. Aprende a desarrollar tus apps para que admitan teclados y dispositivos apuntadores, como el mouse y el panel táctil, con Compose. La incorporación de actividades permite que las apps basadas en ellas admitan diseños de dos paneles en pantallas grandes sin refactorizar el código. Solo debes agregar algunas dependencias, crear un archivo de configuración XML, implementar un inicializador y agregar algunos elementos al manifiesto de la app. O bien, si prefieres trabajar en código, puedes realizar algunas llamadas a la API de Jetpack desde el método onCreate() de la actividad principal. En este codelab, usarás los enfoques de desarrollo de XML y API para actualizar una app basada en actividades a un diseño de lista-detalles de dos paneles. En este codelab, aprenderás sobre el ciclo de vida de la actividad y los registros. Aprende a agregar un botón de acción, configurar las acciones del teclado y usar un elemento Switch componible. Obtén información para crear una app para Android que muestre tu tarjeta de presentación. Aprende a compilar una app interactiva de Dice Roller que les permita a los usuarios lanzar un dado y, luego, mostrar el resultado. En este codelab, aprenderás a migrar partes de una pantalla del sistema de View a Jetpack Compose. Aprende a usar arrays y colecciones, lo que incluye las listas, los conjuntos y los mapas. Obtén información sobre cómo conectar a tus usuarios entre sí, incluso cuando no hay Internet disponible Aprende a usar clases y objetos en Kotlin. En este codelab, aprenderás a usar la nueva función de incorporación de actividades para mejorar la experiencia de la app en pantallas grandes. Estas funciones incluyen la expansión de paneles, la presentación superpuesta, la atenuación de diálogos en pantalla completa y el anclaje de pilas de actividades. En el Playground de Kotlin, aprende a usar corrutinas de Kotlin para escribir código asíncrono. En este codelab, aprenderás a exponer tus datos a complicaciones de cara de reloj, teniendo en cuenta las prácticas recomendadas de la plataforma. Aprende a usar corrutinas de Kotlin dentro de una app para Android y a probarlas. En este codelab, crearás una app de salud y fitness que admite la lectura y escritura en Health Connect. En este codelab, aprenderás a realizar pruebas de las IU que creas con Jetpack Compose. Escribirás tus primeras pruebas, a la vez que aprendes sobre las pruebas aisladas, las pruebas de depuración, los árboles semánticos y la sincronización.Codelab de la API de Activity Recognition Transition
Conversión a Kotlin (obsoleto)
Reconoce, identifica y traduce texto con ML Kit y CameraX: Android
Cómo integrar funciones de adaptabilidad a tu juego nativo
Cómo mejorar el rendimiento de una app con los perfiles de Baseline
Cómo agregar diseños adaptables a una app para Android basada en vistas con Compose
Agrega Play Integrity a tu aplicación para Android
Cómo configurar, implementar y verificar Android App Links
Cómo agregar compatibilidad con el teclado, el mouse, el panel táctil y la pluma stylus con Jetpack Compose
Cómo compilar un diseño de lista-detalles con incorporación de actividades y Material Design
Etapas del ciclo de vida de la actividad
Calcula una propina personalizada
Proyecto: Crea una app de tarjetas de presentación
Cómo crear una app interactiva de Dice Roller
Cómo agregar Compose a una app basada en objetos View
Cómo usar colecciones en Kotlin
Comunicación bidireccional sin Internet
Usa clases y objetos en Kotlin
Incorporación de actividades avanzada
Introducción a las corrutinas en el Playground de Kotlin
(Obsoleto) Cómo exponer datos a complicaciones de la cara de reloj en Wear OS
Introducción a las corrutinas en Android Studio
Tu primera app integrada de Health Connect
Pruebas en Jetpack Compose