Intern
¿Cuál es la diferencia entre un servicio en segundo plano y un servicio en segundo plano en Android?
sobes.tech AI
Respuesta de la IA
La diferencia entre un servicio en segundo plano normal y un servicio en segundo plano limitado (restricted) apareció con Android 8.0 (API 26).
Servicio en segundo plano normal:
- Puede funcionar indefinidamente en segundo plano.
- El sistema puede detenerlo por falta de recursos, pero puede reiniciarse si se devuelve
START_STICKYenonStartCommand(). - No requiere notificaciones visibles para el usuario (aunque esto no es la mejor práctica desde el punto de vista de UX).
- Puede consumir recursos significativos de batería y CPU.
Servicio en segundo plano limitado (se aplican restricciones):
- Un servicio iniciado en segundo plano sin actividades visibles u otras "listas blancas" (condiciones privilegiadas) enfrenta restricciones en el uso de recursos.
- Las principales restricciones incluyen:
- Restricción en la ejecución en segundo plano: El sistema puede detener el servicio en poco tiempo (generalmente unos minutos) después de que la aplicación pase a segundo plano.
- Prohibición de iniciar nuevos servicios en segundo plano: La aplicación en segundo plano no puede iniciar nuevos servicios en segundo plano usando
startService(). En su lugar, debe usarJobScheduleroWorkManager. - Restricción en la recepción de mensajes broadcast: Los mensajes broadcast implícitos en el manifiesto serán ignorados. La aplicación debe registrar explícitamente receptores de broadcast o usar JobScheduler/WorkManager para manejar eventos.
- El objetivo de estas restricciones es mejorar la duración de la batería y el rendimiento del dispositivo, limitando el uso irracional de recursos por aplicaciones en segundo plano.
Cómo un servicio se vuelve no limitado (activo a los ojos del sistema):
- La aplicación está en primer plano (el usuario interactúa activamente con ella).
- La aplicación inicia un servicio visible (foreground service), que muestra una notificación constante al usuario.
- La aplicación realiza tareas específicas (por ejemplo, procesamiento de mensajes broadcast, ejecución de tareas JobScheduler) que temporalmente la sacan del estado de trabajo en segundo plano irracional completo.
Diferencia principal: Con Android 8.0 y versiones superiores, un servicio que funciona en segundo plano sin actividad visible del usuario o servicio visible será limitado por el sistema en cuanto al acceso a recursos y la capacidad de trabajar durante mucho tiempo. El "servicio en segundo plano" normal antes de Android 8.0 podía funcionar sin estas restricciones estrictas.