许多应用都需要在后台传输数据。本指南概述了可靠的后台数据传输选项,并提供了实现方法示例。
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 |
---|---|---|---|
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
|
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) |
|
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 |
|
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 |
|
|
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
.
Instrucción de IA
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?
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
- Orientación sobre la transferencia de datos iniciada por el usuario
- Descripción general de los servicios en primer plano