Conexión larga de sondeo TCP de Android

Im tratando desde el mes de hacer un "empuje" adecuado sin necesidad de utilizar las bibliotecas externas o gcm.

Primero probé xmpp con asmack, luego mosquitto con paho o ibm mqtt cliente y http con alarmtimer.

Finalmente terminé con diácono y meteord pero ya que no es muy bueno (en el lado del servidor – alta CPU y carga de memoria) estoy tratando de hacer una conexión longpolling.

Sé que requiere un latido del corazón y finalmente estaba pensando en el retraso (300 segundos latido del corazón debe ser suficiente?) Y la forma correcta.

¿Es mejor (el uso de la batería y así sucesivamente) para enviar un Heartbeat (con 1 byte o lo que sea) de servidor a cliente (retrasar por ejemplo 300 segundos) y establecer un tiempo de espera de socket en el lado del cliente de 300, o es mejor enviar Desde el cliente hasta el servidor?

Actualmente estoy usando un servicio que registra un observador en onCreate y cancela el registro en onDestroy.

El Observer está observando un objeto que establece una conexión de socket tcp en un Thread y lo vuelve a intentar cuando se desconecta (timeout de socket).

También compruebo con un broadcastreciever si la conexión de red cambió y vuelvo a conectar si es necesario.

¿Qué ocurre cuando el dispositivo entra en modo de espera? ¿Realmente necesito un alarmmanager o timertask para recibir o enviar el paquete?

¿El dispositivo deja caer la conexión cuando entra en modo de espera?

Actualmente he intentado enviar de servidor a cliente con un retraso de 120 segundos e incluso cuando los dispositivos de visualización de su todavía posible enviar el latido del corazón.

Pero al menos parece que el drenaje de la batería no es "aceptable".

Así que .. ¿Cuál es la mejor manera de hacer eso?

Gracias hasta ahora.

    La mejor solución para hacer esto es usar REST y un servidor Comet o al menos NGinx con un módulo Push Stream y un sondeo largo . También he creado un servicio que volver pegajoso y crear un hilo al iniciar. El hilo se conecta. Todavía funciona incluso en modo de espera y / o sueño profundo.

    Para Java, hay un proyecto bastante maduro que implementa backsockets websocket y long-pollling: https://github.com/cometd/cometd . También tiene términos bastante flojos de la licencia (estilo de BSD / Apache).

    Echa un vistazo a socket.io hay una implementación para Android. No creo que mantener la conexión viva cuando la pantalla se apaga es una buena idea de batería sabio. No puedo contestar todas sus preguntas, pero sé que por defecto la conexión Wi-Fi se cancela cuando el dispositivo entra en modo de espera en algunos dispositivos (también puede depender de la configuración configurada por el usuario).

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.