Comment rendre l'appareil Android titulaire d'une connexion TCP à Internet sans verrou de sillage?
Je veux que ma demande soit connecté au serveur si la connexion mobile, mais permettant à l'appareil de passer en mode veille. J'attends qu'il se réveiller quand IP packates arrive.
Comment cela peut-il être fait? Comment recevoir les "interruptions" de l'Internet sans vider la batterie?
source d'informationauteur Vi.
Vous devez vous connecter pour publier un commentaire.
Lorsque vous êtes bloqué sur une lecture d'un flux tcp, l'appareil peut aller dans un sommeil profond et lorsque le trafic tcp arrive brièvement de réactivation de l'appareil, dès qu'un morceau est lu en vous démarrez un wakelock jusqu'à ce que vous avez reçu l'ensemble de la transmission, puis relâchez-la.
Voici un exemple avec les web sockets, j'ai couru cette application pour plus de 12 heures en arrière-plan sans impact sur la batterie.
https://github.com/schwiz/android-websocket-example
Le client est ici, le blocage de la lecture est dans la méthode start.
https://github.com/schwiz/android-websockets/blob/master/src/com/codebutler/android_websockets/HybiParser.java
J'ai été en utilisant long de la vie les connexions TCP sur Android sans un signal de verrouillage depuis quelques années maintenant.
Mon expérience est que lorsque des données arrivent sur une connexion TCP et l'appareil est dans le sommeil profond, il sera réveillé pour une courte période de temps au moins. Le réveil de l'appareil pourrait prendre jusqu'à ~2 minutes parfois, mais ce qui se fait habituellement dans un délai de quelques secondes.
Maintenant que le dispositif est éveillé, le processus de réception a quelques temps, trop de traiter les données. Maintenant, le processus est en mesure de le faire avant de l'appareil est de retour dans un profond sommeil, ou l'appareil sera mis en sommeil profond de suspendre le processus. La chose importante ici est que les données n'est pas perdu, il reste dans la mémoire et le processus est en mesure de reprendre le travail de traitement des données la prochaine fois que l'appareil quitte le sommeil profond. Bien sûr, cela signifie que si l'expéditeur attend une réponse à ses données, il peut prendre un certain temps, jusqu'à ce qu'il l'obtienne.
Vous pourrait prendre un sillage de verrouillage dès que votre réseau de la bibliothèque vous informe qu'un nouveau message a été reçu. Mais si vous le faites, alors assurez-vous de manipuler le verrouiller correctement, c'est à dire de s'assurer qu'il est publié à un moment et dans chaque chemin d'accès du code. Personnellement, j'ai jamais éprouvé le besoin d'un réveil de verrouillage, l'appareil Android a toujours été assez longtemps éveillé pour traiter la demande. Mais vos valeurs peuvent varier.
Google Cloud Messaging peut-être ce que vous cherchez:
http://developer.android.com/guide/google/gcm/index.html