Hace un par de días me di cuenta de que ya no recibo mensajes de WhatsApp hasta que inicio la aplicación manualmente, que es cuando se entregan los mensajes pendientes de una sola vez.
Comencé mi investigación monitoreando el com.whatsapp.messaging.MessageService
en el Administrador de Aplicaciones.
Esto es lo que parece al principio, después de salir de WhatsApp:
Y así es como se ve unos minutos después:
Parece que el MessageService
o lo dejaba, o se terminaba. Para verificar esto, lo comprobé con Adb. Puedo ver el servicio al principio:
$ adb shell dumpsys activity services | grep wh
* ServiceRecord{43deec28 u0 com.whatsapp/.messaging.MessageService}
intent={act=com.whatsapp.messaging.MessageService.START cmp=com.whatsapp/.messaging.MessageService}
packageName=com.whatsapp
processName=com.whatsapp
baseDir=/data/app/com.whatsapp-1.apk
dataDir=/data/data/com.whatsapp
app=ProcessRecord{42d19f90 10037:com.whatsapp/u0a10187}
Pero entonces este servicio desaparece, aunque el proceso principal sigue funcionando:
$ adb shell ps | grep wh
u0_a187 10037 215 988084 78996 ffffffff 00000000 S com.whatsapp
El servicio no se termina al mismo tiempo. Lo he visto matado tan pronto como 6 minutos después de salir de WhatsApp, y tan tarde como a los 11 minutos. Pero en la gran mayoría de los casos, se termina en algún momento del 8º minuto.
He examinado cuidadosamente el logcat
durante el momento de la terminación del servicio con la siguiente consulta de logcat, que creo que silencia sólo las cosas que no me importan:
adb logcat -v time LightSensor:s LightsService:s SensorService:s SensorManager:s STATUSBAR-BatteryController:s BatteryService:s HeadsetStateMachine:s android.widget.GridLayout:s MP-Decision:s SignalStrength:s McClient:s McDaemon:s QcrilMsgTunnelSocket:s | grep -v ss_tz_mobicore | grep -v ss_daemon
No pude ver nada en los registros que sugiriera lo que pasó con el servicio. ¿Renunció? ¿Algo lo mató? ¿Cómo puedo averiguarlo?
Pensé que tal vez el servicio se había terminado b/c el SO estaba bajo en RAM, pero esto no parece ser así. Aquí está la RAM en el momento de la terminación:
$ adb shell free -m
total used free shared buffers
Mem: 1821 1587 234 0 75
-/+ buffers: 1511 310
Swap: 399 134 265
Mientras trabajaba en este tema, he utilizado Titanium Backup para congelar todas las aplicaciones que pudieran interferir con el funcionamiento normal de WhatsApp, así que estas son las aplicaciones que he congelado:
- Greenify
- Ampliar
- XPrivacy
También apagué "Per App Hacking", que es un Módulo Xpuesto.
¿Alguna idea de cómo puedo saber más acerca de por qué MessageService está siendo cancelado?
EDICIÓN 1 : ¿Es posible que MessageService se termine y que WhatsApp confíe en que GCM sea notificado cuando haya nuevos mensajes?