4.2 Actividad en segundo plano: límites, optimización y permisos especiales
Límites de ejecución en segundo plano
Android aplica restricciones para preservar batería y recursos. Desde Android 8.0 (Oreo) y posteriores el sistema controla:
- Background Execution Limits: los servicios iniciados en segundo plano disponen de tiempo limitado para ejecutarse.
- Doze y App Standby: el dispositivo entra en modo reposo, bloqueando tareas programadas y conexiones de red.
- Limitación de AlarmManager: restricciones en alarmas repetitivas y exactas.
- Restricciones de broadcasts implícitos: solo se reciben si están registrados dinámicamente o son explícitos.
Optimización de actividades en segundo plano
Para mejorar rendimiento y compatibilidad con las políticas del sistema:
- Usar WorkManager para tareas diferidas con restricciones de red, batería y almacenamiento.
- Emplear JobScheduler en versiones de Android a partir de API 21.
- Evitar wakelocks prolongados optar por WakefulBroadcastReceiver o WorkManager que maneja sus propios wakelocks.
- Agrupar operaciones de red y sincronizaciones en lotes para reducir wakeups.
- Configurar esquemas de reintento con exponential backoff en tareas fallidas.
- Si la tarea es crítica, usar servicios en primer plano (foreground service) con notificación persistente.
Permisos especiales
Para ejecutar trabajos fuera de los límites predeterminados, es necesario solicitar permisos o ajustes adicionales:
- REQUEST_IGNORE_BATTERY_OPTIMIZATIONS: permite esquivar Doze. Requiere llevar al usuario a la pantalla de optimización de batería.
- FOREGROUND_SERVICE: necesario para iniciar servicios en primer plano en Android 9 y superior, junto con una notificación persistente.
- USE_SCHEDULE_EXACT_ALARM: desde Android 12, para programar alarmas exactas con AlarmManager.
- ACCESS_BACKGROUND_LOCATION: para obtener ubicación en segundo plano en Android 10 y posteriores.
- ACTIVITY_RECOGNITION: para detectar actividad física y contexto del usuario.
Flujo de solicitud de permisos
- Declarar el permiso en el archivo AndroidManifest.xml.
- Verificar el estado del permiso en tiempo de ejecución.
- Solicitar al usuario mediante la API de permisos o, en el caso de optimizaciones de batería, mediante un Intent al panel de ajustes.
- Gestionar la respuesta en el callback correspondiente para adaptar la lógica de la app.
Profundizando sobre: 4.2 Actividad en segundo plano: límites, optimización y permisos especiales
Libros recomendados:
- Android Programming: The Big Nerd Ranch Guide de Bill Phillips, Chris Stewart y Kristin Marsicano. Capítulo sobre servicios en segundo plano y optimización.
- Android Cookbook de Ian F. Darwin. Recetas prácticas para WorkManager, JobScheduler y límites de ejecución.
- Android Internals:: A Confectioners Cookbook de Jonathan Levin. Análisis profundo de la arquitectura y políticas de límites de procesos.
- Pro Android with Kotlin de Peter Späth. Sección dedicada a gestión de permisos especiales y optimización de tareas en segundo plano.
Recursos en línea y documentación oficial:
- Servicios en Android (Android Developers): Guía oficial de servicios, límites y optimización.
- Optimizaciones en segundo plano: Buenas prácticas y patrones de uso.
- Solicitar permisos en tiempo de ejecución: Gestión de permisos especiales como ubicación en segundo plano.
- Android Vitals: Segundo plano: Métricas y límites de batería.
- Google Samples: WorkManager: Ejemplos prácticos para programar trabajo en background.
- Android Performance Optimization (Udacity): Curso gratuito centrado en eficiencia y límites.
Deja una respuesta