wake studio lock keep doze descargar app android networking wakelock standby

android - studio - doze app



¿Cómo hacer que el dispositivo Android mantenga una conexión TCP a Internet sin activar el bloqueo? (3)

Quiero que mi aplicación se conecte al servidor a través de la conexión móvil, pero permitiendo que el dispositivo entre en modo de suspensión. Espero que se despierte cuando llegue el paquete de IP.

¿Cómo puede hacerse esto? ¿Cómo recibir "interrupciones" de Internet sin agotar la batería?



Cuando está bloqueado en una lectura de una transmisión tcp, el dispositivo puede entrar en un sueño profundo y cuando entra el tráfico de tcp, se activará brevemente el dispositivo, tan pronto como se lea un bit, comenzará un wakelock hasta que haya recibido el total transmisión luego liberarlo.

Aquí hay un ejemplo con sockets web, he ejecutado esta aplicación durante más de 12 horas en segundo plano sin impacto en la batería. https://github.com/schwiz/android-websocket-example

El cliente está aquí, la lectura de bloqueo está en el método de inicio. https://github.com/schwiz/android-websockets/blob/master/src/com/codebutler/android_websockets/HybiParser.java


He estado utilizando conexiones TCP de larga duración en Android sin un bloqueo de activación desde hace algunos años.

Mi experiencia es que cuando los datos llegan a una conexión TCP y el dispositivo está en modo de suspensión profunda, se lo despierta por un período corto de tiempo al menos. Despertar el dispositivo puede tomar hasta ~ 2 minutos a veces, pero generalmente se realiza en unos pocos segundos.

Ahora que el dispositivo está en funcionamiento, el proceso de recepción también debe procesar los datos. Ahora, o bien el proceso puede hacerlo antes de que el dispositivo vuelva a estar en modo de suspensión profunda, o el dispositivo se pondrá en suspensión y suspenderá también el proceso. Lo importante aquí es que los datos no se pierden, permanecen en la memoria y el proceso puede reanudar el trabajo de procesamiento de los datos la próxima vez que el dispositivo deje de dormir profundamente. Por supuesto, esto significa que si el remitente espera una respuesta a sus datos, puede tomar un tiempo, hasta que lo reciba.

Puede tomar un bloqueo de activación tan pronto como su biblioteca de red le notifique que se recibió un nuevo mensaje. Pero si lo ha hecho, asegúrese de manejar el bloqueo correctamente, es decir, asegúrese de que se libere en algún punto y en cada ruta del código . Personalmente, nunca experimenté la necesidad de un bloqueo de activación, el dispositivo Android siempre estaba lo suficientemente despierto como para procesar la solicitud. Pero su millage puede variar.