Guía para el procesamiento en segundo plano

El procesamiento de datos en segundo plano es una parte importante a la hora de crear una aplicación que sea eficaz para los usuarios y funcione de manera adecuada en la plataforma de Android. Esta guía define las categorías de tareas en segundo plano, proporciona criterios de categorización y recomienda las API que deberías usar para ejecutarlas.

Principio rector

En general, toda tarea que lleve más de unos pocos milisegundos debería delegarse a un subproceso en segundo plano. Las tareas comunes de larga duración incluyen, por ejemplo, decodificar un mapa de bits, acceder al almacenamiento, desarrollar un modelo de aprendizaje automático (AA) o enviar solicitudes de red.

Categorías de tareas en segundo plano

Las tareas en segundo plano se dividen en las siguientes categorías principales:

  • Inmediata
  • Diferida
  • Exacta

A fin de categorizar una tarea, responde las siguientes preguntas y recorre el árbol de decisión de la figura 1 según corresponda:

¿La tarea debe completarse mientras el usuario está interactuando con la aplicación?
Si es así, esa tarea debería clasificarse como inmediata. De lo contrario, pasa a la segunda pregunta.
¿La tarea debe ejecutarse en un momento exacto?
Si necesitas ejecutarla en un momento preciso, clasifica la tarea como exacta.

La mayoría de las tareas no necesitan ejecutarse en un momento exacto. Por lo general, las tareas admiten algunas variaciones cuando se ejecutan en función de ciertas condiciones, como la disponibilidad de la red y la batería restante. Las tareas que no necesitan ejecutarse en un momento exacto deben clasificarse como diferidas.

Este árbol de decisión te ayudará a determina qué categoría es la más adecuada para tu tarea en segundo plano
Figura 1: Este árbol de decisión te ayudará a determinar qué categoría es la más adecuada para tu tarea en segundo plano.

Las siguientes secciones describen las soluciones recomendadas para cada tipo de tarea en segundo plano.

Te recomendamos que uses las corrutinas de Kotlin para tareas que deben finalizar cuando el usuario sale de un determinado alcance o termina una interacción. Muchas bibliotecas de Android KTX cuentan con alcances de corrutinas preparados para ciclos de vida y componentes comunes de la app, como ViewModel.

Si eres usuario del lenguaje de programación Java, consulta Cómo administrar subprocesos en Android para conocer las opciones recomendadas.

Para tareas que necesitan ejecutarse de inmediato y procesarse de forma continua, incluso cuando el usuario coloca la aplicación en segundo plano o se reinicia el dispositivo, te recomendamos que uses WorkManager y su versión compatible con las tareas de larga duración.

En casos específicos, como la reproducción de contenido multimedia o la navegación activa, te recomendamos que uses directamente los servicios en primer plano.

Tareas diferidas

Toda tarea que no esté conectada a una interacción del usuario de forma directa y pueda ejecutarse en cualquier momento puede ser diferida. La solución recomendada para las tareas diferidas es WorkManager.

WorkManager facilita la programación de tareas diferibles y asíncronas que se deben ejecutar incluso si se cierra la app o se reinicia el dispositivo. Consulta la documentación de WorkManager para descubrir cómo programar estos tipos de tareas.

Tareas exactas

Una tarea que debe ejecutarse en un momento exacto puede usar AlarmManager.

Para obtener más información sobre AlarmManager, consulta Cómo programar alarmas repetitivas.