Opciones de tareas en segundo plano de transferencia de datos

Muchas apps necesitan transferir datos en segundo plano. En esta guía, se describen las opciones para una transferencia de datos en segundo plano confiable y se proporcionan ejemplos para implementarlas.

Situaciones comunes de transferencia de datos en segundo plano

En esta sección, se describen algunas situaciones comunes en las que las apps deben transferir datos desde o hacia el dispositivo y te ayuda a elegir la herramienta adecuada para tu situación.

Cuando elijas entre las APIs, debes tener en cuenta las siguientes preguntas:

  • ¿El usuario inició la transferencia?
  • ¿Existe una API existente que controle esta transferencia?
  • ¿El trabajo debe ejecutarse de inmediato?
Opción Cuándo debe usarse Duración Ejemplos

WorkManager

Para programar tareas con una duración inferior a 10 minutos que se deben ejecutar cuando la app no está visible.

Aplazable: También se puede ajustar según las restricciones.

Inmediato: Usa setExpedited si el trabajo debe ejecutarse de inmediato.

Sincronización periódica de datos con un servidor

Descarga o carga de contenido multimedia mientras se está en la red. Inicio en segundo plano (no por el usuario)

Trabajo de transferencia de datos iniciado por el usuario

Cuando el usuario activa la transferencia de datos y debes mantenerlo informado sobre el progreso de la transferencia.

El usuario es quien inicia el servicio (es decir, hace clic en un botón) y comienza de inmediato.

Subir una foto o descargar un archivo

Servicio en primer plano

Para tareas breves y críticas, o cuando WorkManager no es una opción. Una notificación le informa al usuario el progreso de la transferencia.

Comienza de inmediato

connectedDevice: Sincroniza datos con un dispositivo conectado.

shortService: Procesamiento de archivos en menos de 3 minutos

mediaProcessing: Codificación o decodificación de un archivo multimedia

API específica

Úsalo si existe uno para esa operación en particular. Pueden generar beneficios, como un rendimiento optimizado y una mejor integración del sistema.

Varía

Cómo sincronizar datos con un dispositivo conectado

Si tu situación no aparece en las situaciones comunes, consulta las siguientes secciones para encontrar la API más adecuada para tu caso de uso. Es probable que WorkManager sea adecuado.

Usa el tipo de tarea de transferencia de datos que inicia el usuario

Si tu app necesita transferir datos a un servidor remoto, te recomendamos que uses una tarea de transferencia de datos que inicie el usuario. Este tipo de trabajo es adecuado si se cumple lo siguiente:

  • El usuario inició la transferencia de datos
  • Debes mantener al usuario al tanto del progreso de la transferencia de datos.
  • Si el sistema interrumpe la transferencia, se perjudica la experiencia del usuario.

Si no se cumple alguna de estas condiciones, debes usar WorkManager.

Por ejemplo, una app de música puede permitir que los usuarios descarguen álbumes para reproducirlos de forma local. Si un usuario quiere descargar una playlist y reproducirla de inmediato, te recomendamos que uses el tipo de tarea de transferencia de datos que inicia el usuario. Por otro lado, si el usuario desea que la playlist descargada se actualice periódicamente en segundo plano sin su intervención, WorkManager sería una mejor opción.

Para obtener más información, incluida la creación y ejecución de una tarea de transferencia de datos iniciada por el usuario, consulta la documentación sobre tareas de transferencia de datos iniciadas por el usuario.

Usa WorkManager para la transferencia de datos

En la mayoría de los casos, WorkManager es la mejor opción cuando necesitas programar trabajo. Ten en cuenta que debes diseñar las tareas de manera tal que el sistema pueda interrumpirlas o diferirlas. Para obtener más información, consulta la documentación de WorkManager.

A continuación, se incluyen algunos aspectos que debes tener en cuenta cuando uses WorkManager para la transferencia de datos en segundo plano:

  • Si necesitas ejecutar el trabajo lo antes posible, puedes programar una solicitud de trabajo acelerada. Esta opción es especialmente útil si programa el trabajo en respuesta a una transmisión, una alarma exacta o un mensaje de FCM de alta prioridad.
  • Si necesitas que el trabajo se ejecute de forma periódica, puedes programar trabajos periódicos. Una solicitud de trabajo periódico te permite especificar de forma aproximada con qué frecuencia se ejecutará el trabajo, pero no garantiza un horario específico. Eso permite que el sistema programe solicitudes de trabajo de diferentes apps para equilibrar las demandas en el dispositivo.
  • Debes definir restricciones de trabajo para especificar las circunstancias correctas para ejecutar tu trabajo. Por ejemplo, si tu app necesita descargar recursos no urgentes, puedes especificar que la tarea se ejecute mientras el dispositivo se carga y está conectado a una red no medida. Luego, WorkManager puede ejecutar tu trabajo en un momento que equilibre la carga en el sistema.
  • WorkManager puede cancelar y reintentar una tarea si es necesario. Por ejemplo, el usuario puede apagar el dispositivo mientras se ejecuta una tarea. Luego, el sistema puede volver a intentar la tarea cuando el dispositivo vuelva a estar disponible. Asegúrate de diseñar y probar tu flujo de trabajo para asegurarte de que el ciclo de cancelación y reintento funcione correctamente.
  • Trabajadores de larga duración (servicio en primer plano): WorkManager puede admitir trabajos que demoren más de 10 minutos creando un servicio en primer plano para tu app. Esto significa que está sujeto a las mismas restricciones que un servicio y trabajos en primer plano, incluidas las restricciones de inicio desde el segundo plano y los límites de ejecución (el sistema reprogramará los trabajos que demoren más de 10 minutos).

JobScheduler es una opción alternativa para programar trabajos en segundo plano. A diferencia de WorkManager, requiere que realices más configuraciones, pero como ventaja, tienes acceso a APIs que no están disponibles actualmente en WorkManager, como setPrefetch, setUserInitiated y getPendingJobReasons.

Cómo usar una API específica

Usa una API específica si hay una disponible (como el administrador de dispositivos complementarios). De lo contrario, usa un servicio en primer plano connectedDevice.

Identifica las APIs específicas del caso de uso

Esta instrucción solicita APIs específicas para tareas de transferencia de datos.


I want to transfer data from an Android mobile device to [device_type]. Is there a specific API available?

Cómo usar las instrucciones de IA

Las instrucciones de IA están diseñadas para usarse en Gemini en Android Studio (se requiere la versión más reciente de Canary).

Obtén más información sobre Gemini en Studio aquí: https://developer.android.com/studio/preview/gemini

Usa un tipo de servicio en primer plano más específico

Si WorkManager y JobScheduler no son adecuados para la tarea en segundo plano en particular, es posible que debas usar un servicio en primer plano.

Como siempre, cuando consideres usar un servicio en primer plano, debes tener en cuenta si hay una mejor API alternativa adaptada a tu caso de uso.

Usa un servicio en primer plano de servicio corto

Si tu app necesita realizar una tarea breve y fundamental, un servicio en primer plano de shortService podría ser la mejor opción. Estas son algunas situaciones en las que un servicio en primer plano shortService podría ser adecuado:

  • El usuario inicia una acción (como sincronizar datos con el servidor) y quieres asegurarte de que la operación finalice, incluso si el usuario envía la app inmediatamente a segundo plano.
  • Almacenamiento de información en la memoria en el almacenamiento persistente
  • Encriptar o desencriptar información

Para obtener información completa, consulta la documentación de shortService.

Usa un servicio en primer plano de dispositivo conectado

Si necesitas transferir datos a otro dispositivo local, te recomendamos que uses un servicio en primer plano de connectedDevice. Estas son algunas situaciones comunes en las que podrías necesitar hacerlo:

  • Comunicarse con un accesorio Bluetooth, como auriculares o un reloj inteligente
  • Transferencia de datos a un dispositivo conectado de forma local, a través de una conexión USB, NFC o una conexión a Internet local

Sin embargo, en estas situaciones, es posible que puedas usar el administrador de dispositivos complementarios para conectarte con el dispositivo en lugar de usar un servicio en primer plano. Como siempre, si hay una API de propósito especial disponible para tu caso de uso, suele ser una mejor opción que usar un servicio en primer plano.

Usa el nuevo servicio en primer plano de procesamiento de contenido multimedia

Si necesitas procesar datos multimedia, puedes usar el servicio en primer plano mediaProcessing. Este tipo de servicio está disponible si tu app se orienta a Android 15 o versiones posteriores. Por ejemplo, este tipo de servicio es adecuado si tu app necesita transcodificar contenido multimedia de un formato a otro para la reproducción. Para obtener más información, consulta la documentación del servicio en primer plano de procesamiento de contenido multimedia.

Recursos adicionales