Wie machen Sie das Android-Gerät halten, eine TCP-Verbindung zum Internet ohne wake-lock?
Ich möchte meine Anwendung mit server verbunden, obwohl die mobile Verbindung, aber was das Gerät in den sleep-Modus. Ich erwarte, dass Sie aufwachen, wenn IP-packates kommt.
Wie kann das getan werden? Wie Sie zu empfangen "- interrupts" aus dem Internet ohne Entleerung der Batterie?
Ich denke, dass ein Dienst könnte Ihr problem lösen, aber nicht, ohne die Batterie entleeren. Es könnte einen hintergrund-thread, der die Prüfungen für die Pakete in Intervallen.
Ich will mit meinem Gerät online sein (z.B. Nachrichten aus XMPP), ohne deutlich mehr Akku-Verbrauch.
Ich will mit meinem Gerät online sein (z.B. Nachrichten aus XMPP), ohne deutlich mehr Akku-Verbrauch.
InformationsquelleAutor Vi. | 2012-11-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie blockiert sind, die auf das Lesen von einem tcp-stream kann das Gerät geht in einen tiefen Schlaf und wenn Sie tcp-traffic ist, wird Sie kurz Aufwach-das Gerät, sobald ein bit gelesen wird, starten Sie einen wakelock, bis Sie empfangen haben, das ganze Getriebe dann loslassen.
Hier ist ein Beispiel mit web-sockets, ich habe diese app seit über 12 Stunden im hintergrund mit keine Batterie Auswirkungen.
https://github.com/schwiz/android-websocket-example
Client ist hier die Sperrung Lesen Sie in der start-Methode.
https://github.com/schwiz/android-websockets/blob/master/src/com/codebutler/android_websockets/HybiParser.java
it will briefly wakeup the device
Ist es zuverlässig (auch über NATs)? Ist es in allen Android-Versionen?Ja TCP-verbindungen funktionieren hinter NATs. Ich bin mir nicht sicher, welche Android-Versionen es funktioniert, ich habe nur getestet mit 4.2 Jedoch Googles GCM services gehen alle der Weg zurück zu 2.2 und ich nehme an, Sie tun etwas ähnliches. Ich habe mit wireshark auch Sie TCP verwenden.
Das ist nicht wahr. In Ihrem Projekt, die Sie halten, partial wake lock, also CPU bleibt aktiv.
Nur wenn es die Daten eigentlich kommen, durch die Röhre, es ist kein wakelock zwischen Kommunikation. Ich verließ diese Programmierung läuft über 12 Stunden und registriert immer noch weniger als 3 Sekunden von wakelock Zeit nach alle meine keep-alive-pings. Das ist genau das, was ich gesagt habe, und ist in der Tat wahr.
gut alles funktioniert außer der
map
Teil. Ich habe gerade ersetzt diemap
Teil mit einemfor
Schleife, so dass alles ist jetzt perfekt! Vielen Dank!InformationsquelleAutor schwiz
Habe ich mit lange lebenden TCP-verbindungen auf Android ohne einen wake-lock für einige Jahre jetzt.
Meine Erfahrung ist, dass bei Empfang der Daten über eine TCP-Verbindung und das Gerät ist im tiefen Schlaf, wird es geweckt werden für eine kurze Zeit zumindest. Aufwachen das Gerät kann bis zu ~2 Minuten manchmal, aber es ist in der Regel innerhalb von ein paar Sekunden.
Nun, dass das Gerät wach ist, den empfangenden Prozess hat einige Zeit auch die Daten verarbeiten. Nun kann entweder der Prozess ist in der Lage, dies zu tun, bevor Sie das Gerät wieder in den deep sleep, oder das Gerät in den deep sleep-anhalten auch der Prozess. Die wichtige Sache hier ist, dass die Daten nicht verloren, es bleibt in der Erinnerung und der Prozess ist wieder auf die Arbeit, die die Verarbeitung der Daten das nächste mal, wenn das Gerät hinterlässt tiefen Schlaf. Natürlich, dies bedeutet, dass, wenn der Absender erwartet eine Antwort auf seine Daten, kann es einige Zeit dauern, bis er es bekommt.
Du könnte nehmen Sie ein wake-lock, sobald Sie Ihre Netzwerk-Bibliothek, die Sie benachrichtigt, dass eine neue Nachricht empfangen wurde. Aber wenn Sie fertig sind, dann stellen Sie sicher, dass Griff die Sperre richtig, d.h. sicherzustellen, dass es ist veröffentlicht und in jeder code-Pfad. Ich persönlich habe nie die Notwendigkeit für ein wake-lock, das Android-Gerät wurde immer lange genug wach, um die Anforderung zu verarbeiten. Aber dein Kilometerstand kann variieren.
InformationsquelleAutor Flow
Google Cloud Messaging könnte das sein, was du suchst:
http://developer.android.com/guide/google/gcm/index.html
InformationsquelleAutor cyroxx