Aplicación móvil enviada a segundo plano App suspended in background
ID de la causa co-mobile-bg · Responsable principal Desarrollo de cliente (Equipo de desarrollo) · También Desarrollo de servidor (Equipo de desarrollo)
Si sales un momento de la app para ver una notificación, el SO la suspende (suspend) a los pocos segundos y, mientras tanto, el servidor te desconecta.
Por qué Se deja el juego en segundo plano para leer un mensaje o atender una llamada → Efecto El motor del juego detiene la partida y el SO pronto suspende también la app y la red → En pantalla Al volver ya hay desconexión y toca reconectar
Responsable principal Desarrollo de cliente (Equipo de desarrollo) · También Desarrollo de servidor (Equipo de desarrollo)
Tareas (Equipo de desarrollo)
Cliente: al volver, reconectar de inmediato y de forma automática con el token de sesión, sin esperar a que la conexión caída expire (retomar la sesión sin volver a iniciar sesión), recibir el estado más reciente de una vez y sincronizarse. Servidor: si se corta el heartbeat, cerrar la conexión pero mantener la sesión del personaje durante un periodo de gracia breve (sin expulsarlo al instante) y, si reconecta dentro de ese plazo, retomarla con el token de sesión.
Cifras de referencia
El motor del juego suele detenerse en el momento en que la app pasa a segundo plano. iOS suspende la app en pocos segundos, o normalmente en unas decenas de segundos si recibe tiempo extra, y Android 14 o posterior congela (freeze) la app que sale de la pantalla a los 10 segundos aproximadamente.
En el gráfico
Desconexión masiva · Desconexiones (timeout de heartbeat), registros de suspensión de la app
Dónde mirar
Cruzar por ID de sesión las horas de suspensión y regreso de la app en el log del cliente (en Unity, OnApplicationPause) con el motivo y la hora de la desconexión en el servidor. En Android, revisar también el motivo de cierre del proceso registrado en ApplicationExitInfo (REASON_LOW_MEMORY, etc.)
Se confirma si
Justo antes de la desconexión por timeout de heartbeat en el servidor, el cliente entró en suspensión, y reconectó nada más volver
Se descarta si
Si la desconexión ocurrió con la app en primer plano: “Expiración del mapeo NAT”, “IP compartida del ISP (CGNAT)” o “Cambio Wi-Fi ↔ LTE/5G”
Se verifica con
Requiere logs y métricas del servidor o el cliente del juego
Para saber más
Si falta memoria, el teléfono puede llegar a cerrar del todo el juego que está en segundo plano. Por eso, al volver de la cámara o de una app de pago o de autenticación, el juego arranca desde cero. Es más habitual en dispositivos de gama baja.
Fuentes
Extending your app’s background execution timeApple Al pasar a segundo plano, applicationDidEnterBackground dispone de 5 segundos y luego la app se suspende; si necesita más, pide tiempo con beginBackgroundTask (el tiempo restante está en backgroundTimeRemaining)
Cached apps freezerAndroid (Google) Android 14 o posterior congela los procesos de apps en estado de caché a los 10 segundos; al congelarse, todos sus hilos se detienen
Application.runInBackgroundUnity Con el valor predeterminado false, se detiene en segundo plano; en Android se detiene en segundo plano sea cual sea el ajuste, e iOS ignora este ajuste
ApplicationExitInfoAndroid (Google) REASON_LOW_MEMORY: el low memory killer del sistema terminó el proceso de la app (los dispositivos que no lo admiten lo reportan como REASON_SIGNALED con SIGKILL)