2013-03-25 5 views
16

Ich muss einen offenen, wechselseitigen Kommunikationskanal zwischen einer Android-App und einem externen Server aufrechterhalten. Ich weiß, dass ich GCM dafür verwenden kann, aber aus verschiedenen Gründen, die nicht für Android gelten, würde ich gerne WebSockets verwenden, wenn irgend möglich.Websockets im Vergleich zu GCM unter Android: Batterieverbrauch?

Kann mir jemand auf einen Vergleich der Ressourcen/Batterie Verbrauchsstatistiken bei der Verwendung von GCM im Vergleich zu einem Java-basierten WebSockets-Client unter Android zeigen?

Vielen Dank im Voraus.

+0

Sie sollten wahrscheinlich die Antwort unten als die richtige wählen. – npgall

+0

@HippopotamusMan Ich habe die gleiche Anfrage, aus dem gleichen Grund. Kannst du nochmal darauf reinspringen? Verwenden Sie noch benutzerdefinierte WebSockets oder verwenden Sie FCM/GCM? Wir testen unsere APP und es verwendet eine Menge Batterie. Nicht sicher, ob dies für die WebSockets ist, aber wir denken es. –

Antwort

25

Da mehrere Anwendungen GCM verwenden, die eine einzige Socket-Verbindung zur Google-Cloud verwenden, sollte die Verwendung von GCM für Benachrichtigungen keine Auswirkungen auf die Akkulaufzeit haben, da nur eine vorhandene Verbindung verwendet wird. Auf der anderen Seite, was immer Sie mit websockets erstellen, wird die Batterie nur auf GCM hinzugefügt werden.

Wenn Sie Ihre Verbindung aufrechterhalten müssen, auch wenn die Anwendung nicht im Vordergrund ist, müssen Sie Ihre Anwendung als Vordergrunddienst erstellen. GCM erledigt dies für Sie.

aktualisieren
Ein Gerät, das ein sehr seltener Fall, da viele wichtige Anwendungen wie gmail Verwendung GCM keine anderen Anwendungen mit GCM ist hat. Ich habe keine genauen Zahlen über die Batterieverbrauch von GCM. Aber die Batterieverwendung von C2DM (GCM-Vorgänger, die das gleiche zugrundeliegende Kommunikationsmodell verwendet) wird in this video ca. 4 Minuten in erwähnt. Ich hatte tatsächlich eine ähnliche Frage über die Batterie-Nutzung einer dauerhaften Socket-Verbindung zu einem externen Server (Android persistent socket connection rules). Obwohl es kein Websocket ist, würde ich den Akkuverbrauch ähnlich sehen. Aber da GCM auf einer viel niedrigeren Ebene des Betriebssystems integriert ist, würde ich sagen, dass es besser optimiert ist als eine benutzerdefinierte Lösung.

Sofern Sie keine Firmenrichtlinie gegen die Verwendung eines Drittanbieterservers oder einige sehr spezifische Spezifikationen haben, würde ich GCM empfehlen. Ich würde auch ermutigen, das gesamte Video über C2DM sowie this video for GCM zu sehen.

+0

Danke, Alex. Was ist mit dem folgenden einfachen Fall: ein und nur ein Android-Prozess benötigt bidirektionale Kommunikation mit einem externen Server? Sind GCM und Websockets in diesem degenerierten Fall hinsichtlich der Nutzung von Android-Ressourcen (Batterie usw.) gleichermaßen effizient, oder wäre einer besser als der andere? – HippopotamusMan

+0

Ein Update zu der Antwort hinzugefügt. Konnte nicht in den Kommentarbereich passen. – Alex

+0

Danke. Ich überprüfe das Video später und deine Informationen sind sehr hilfreich. Sieht so aus, als würde ich wahrscheinlich GCM benutzen. – HippopotamusMan

Verwandte Themen