Opciones de tareas en segundo plano de transferencia de datos

许多应用都需要在后台传输数据。本指南概述了可靠的后台数据传输选项,并提供了实现方法示例。

Situaciones comunes de transferencia de datos en segundo plano

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

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

  • ¿El usuario inició la transferencia?
  • ¿Existe una API 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 deben ejecutarse cuando la app no está visible.

Diferible: También se puede ajustar con 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 (iniciada en segundo plano, no por el usuario)

Tarea de transferencia de datos iniciada por el usuario

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

Iniciada por el usuario (es decir, con un clic en un botón): Comienza de inmediato

Subir una foto o descargar un archivo

Servicio en primer plano

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

Comienza de inmediato

connectedDevice: Sincronizar datos con un dispositivo conectado

shortService: Procesamiento de archivos en menos de 3 minutos

mediaProcessing: Codificar o decodificar un archivo multimedia

API específica

Se usa si existe una para esa operación en particular. Puede generar beneficios, como un rendimiento optimizado y una mejor integración del sistema.

Varía

Sincroniza datos con un dispositivo conectado

Si tu situación no se encuentra en la lista de 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, es posible que desees usar una tarea de transferencia de datos iniciada por el usuario. Este tipo de trabajo es adecuado si se cumple lo siguiente:

  • El usuario comenzó la transferencia de datos.
  • Debes mantener al usuario informado sobre el 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 contenido multimedia 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 iniciada por el usuario. Por otro lado, si el usuario quiere que la playlist descargada se actualice periódicamente en segundo plano sin que él inicie la actualización, WorkManager sería una mejor opción.

Para obtener más información, incluido cómo crear y ejecutar una tarea de transferencia de datos iniciada por el usuario, consulta la documentación sobre las 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 que el sistema pueda interrumpirlas o aplazarlas. 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 utilices 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 programas 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 trabajo periódico. Una solicitud de trabajo periódico te permite especificar aproximadamente con qué frecuencia se ejecutará el trabajo, pero no garantiza un momento específico. Esto 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 adecuadas para ejecutar tu trabajo. Por ejemplo, si tu app necesita descargar recursos no urgentes, puedes especificar que el trabajo 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 un trabajo si es necesario. Por ejemplo, el usuario puede apagar el dispositivo mientras se ejecuta un trabajo. Luego, el sistema puede volver a intentar el trabajo cuando el dispositivo esté disponible. Asegúrate de diseñar y probar tu flujo de trabajo para garantizar que el ciclo de cancelación y reintento funcione correctamente.
  • Trabajadores de ejecución prolongada (servicio en primer plano): WorkManager puede admitir trabajos que tardan 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 para el inicio desde el segundo plano y los límites de ejecución (el sistema reprogramará los trabajos que tarden más de 10 minutos).

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

Usa una API específica

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

Identifica APIs específicas para casos 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 instrucciones de IA

Las instrucciones de IA están diseñadas para usarse en Gemini en Android Studio.

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

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 evaluar si existe una API alternativa mejor adaptada a tu caso de uso.

Usa un servicio en primer plano de corta duración

Si tu app necesita realizar una tarea breve y crítica, un servicio en primer plano shortService puede ser la mejor opción. A continuación, se indican algunas situaciones en las que podría ser adecuado un servicio en primer plano:shortService

  • 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 inmediatamente la app a segundo plano.
  • Guardar 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.

Cómo usar un servicio en primer plano de un 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 medios

Si necesitas procesar datos multimedia, puedes usar el servicio en primer plano mediaProcessing. Este tipo de servicio está disponible si tu app se segmenta para 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 su reproducción. Para obtener más información, consulta la documentación del servicio en primer plano de procesamiento de medios.

Recursos adicionales