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 |
---|---|---|---|
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
|
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) |
|
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 |
|
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 |
|
|
Ú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
.
Instrucción de IA
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?
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
- Orientación sobre la transferencia de datos que inicia el usuario
- Descripción general de los servicios en primer plano