Ver Mensaje Individual
  #888  
Viejo 28/02/13, 13:26:09
Avatar de ffercar
ffercar ffercar no está en línea
Usuario muy activo
Mensajes: 1,175
 
Fecha de registro: oct 2011
Localización: Murcia
Mensajes: 1,175
Modelo de smartphone: Nexus 6p/ Nexus 7/Nexus 4 /Galaxy s2 i9100
Versión de ROM: 8.0/7.1
Tu operador: Lowi
Mencionado: 4 comentarios
Tagged: 0 hilos
Cita:
Originalmente Escrito por malkair Ver Mensaje
Como ya se ha dicho, el problema se puede producir tanto en 3G como en Wifi.

La explicación que ya se ha comentado por aquí y que parte de un hilo en XDA es la siguiente:
El teléfono está continuamente mandando "señales" (heartbeats) al servidor push (con el se comunica por el puerto 4223) cada 15 minutos (wifi) o 28 minutos (3G). Este tiempo ha sido siempre el mismo en anteriores versiones de Android, así que este no es el problema.

El problema está en que, por razones hasta ahora no conocidas, el teléfono deja de mandar esa "señal" de forma aparentemente aleatoria: Unas veces la envía, otras veces no. Parece que en deepsleep hay más posibilidades de que deje de enviarla. Debe haber algún servicio oculto de sistema que, por la razón que sea, "muere" y no funciona como debe. Esto no le ocurre a todo el mundo, ni al mismo tiempo, ni en las mismas circunstancias.

Al ocurrir esto, entra el juego la otra parte: Tras x minutos de inactividad, el router/operador bloquea la conexión por el puerto 4223; al ocurrir esto, el servidor no recibe las "señales" del teléfono, por lo que cree que el teléfono está "inactivo" y no le "contesta" con notificaciones. Cuando la conexión se reinicia (algo que sucede siempre cuando salimos de deepsleep y también sucede a veces de forma espontánea y aleatoria incluso cuando seguimos en deepsleep), servidor se entera de que volvemos a estar "activos" y ¡zas! nos manda de golpe todas las notificaciones pendientes. Antes creía que gran parte del problema estaba en el router/operador, pero ya no lo creo así.

Como workaround, se ha propuesto lo siguiente: En algunos routers se puede configurar un parámetro que alarga el tiempo de inactividad para el bloqueo de la conexión, pero en 3G ese tiempo lo fija el operador y, por lo que parece, es variable según cada operador e incluso según cada zona (¿antena? ¿router local?). Lógicamente, esa solución no es la definitiva ni acaba con el problema.

La solución habrá que buscarla en por qué el teléfono a veces deja de enviar las "señales" al servidor push (o se envían pero no llegan). Está claro que más tarde o más temprano esas señales vuelven a enviarse (y/o a llegar al servidor) incluso sin que el usuario encienda la pantalla, pero ¿por qué?

Una buena (pero no definitiva) solución es la apuntada por XDA: Reducir el tiempo de envío de cada "señal" (heartbeat) a 5 minutos. Así, si una falla, solo habrá que esperar otros 5 minutos para el envío de la siguiente, en vez de 15/28 minutos como sucede sin fix. Pero seguimos en lo mismo, ¿por qué fallan los heartbeats?

Eso es lo que se comenta en XDA.
Responder Con Cita