Netzwerkzugriff optimieren

Die Nutzung des WLANs zur Datenübertragung ist eine der größten Akkubelastungen Ihrer App. Zur Minimierung des zu viel Akkuverbrauchs der Netzwerkaktivität ist es wichtig, dass Sie wissen, die zugrunde liegende Funkhardware beeinflussen.

In diesem Abschnitt wird der Funkstatusautomat vorgestellt und erläutert, wie das Konnektivitätsmodell Ihrer App damit interagiert. Anschließend werden verschiedene Methoden beschrieben, mit denen sich die Auswirkungen des Datenverbrauchs Ihrer App auf den Akku minimieren lassen.

Der Radio-Zustandsautomat

Das kabellose Funkgerät auf deinem Gerät verfügt über integrierte Energiesparfunktionen, die können Sie den Akkuverbrauch reduzieren. Bei voller Aktivität verbraucht das WLAN-Funkmodul viel Strom, im Inaktivitäts- oder Standbymodus jedoch nur sehr wenig.

Denken Sie daran, dass das Radio nicht vom Standby- zu sofort vollständig aktiv sind. Es gibt einen Latenzzeitraum, der "Laufen" aus dem Radio. Die Batterie wechselt von einem höheren Energieverbrauch zu Energiestatus langsam senken, um Energie zu sparen, wenn sie Sie versuchen, die Latenz beim Einschalten zu minimieren. aus dem Radio.

Die Zustandsmaschine für ein typisches 3G-Netzwerkfunkgerät besteht aus drei Energiezuständen:

  • Vollständige Leistung: Wird verwendet, wenn eine Verbindung aktiv ist, sodass das Gerät Daten mit der höchstmöglichen Geschwindigkeit übertragen kann.
  • Niedriger Energieverbrauch: Ein Zwischenzustand, der den Akkuverbrauch um um die 50%.
  • Stand-by: Der minimale Stromverbrauchsstatus, in dem kein Netzwerk verfügbar ist. Verbindung ist aktiv.

Der Niedrig- und der Standby-Zustand entlädt sich zwar deutlich weniger Akku, führen bei Netzwerkanfragen zu einer erheblichen Latenz. Volle Power von Der Energiesparmodus dauert etwa 1, 5 Sekunden und der Wechsel aus dem Standby-Modus in die volle Stromversorgung kann mehr als 2 Sekunden dauern.

Zum Minimieren der Latenz verwendet die Zustandsmaschine eine Verzögerung, um den Übergang zu verschieben Energiebundesstaaten. In Abbildung 1 wird das Timing von AT&T für eine typische 3G-Funkschnittstelle verwendet.


Abbildung 1: Typischer kabelloser 3G-Funksender.

Den Funkzustandsautomaten auf jedem Gerät, insbesondere der zugehörige Übergang die Verzögerung („Extremzeit“) und Startlatenz, variieren je nach Funkfrequenz eingesetzt wird (3G, LTE, 5G usw.) und wird von das Mobilfunknetz, über das das Gerät betrieben wird.

Auf dieser Seite wird ein repräsentativer Zustandsautomat für ein typisches 3G-Funkgerät beschrieben, basierend auf Daten von AT&T. Die allgemeinen Prinzipien und die daraus resultierenden Best Practices gelten jedoch für alle drahtlosen Funkimplementierungen.

Dieser Ansatz ist besonders effektiv für das typische mobile Surfen im Web, da unerwünschte Latenzen beim Surfen vermieden werden. Die relativ kurze Endzeit sorgt außerdem dafür, dass das Funkmodul nach einer Browser-Sitzung in einen niedrigeren Energiestatus wechseln kann.

Leider kann dieser Ansatz zu ineffizienten Apps auf modernen Smartphone-Betriebssystemen wie Android führen, bei denen Apps sowohl im Vordergrund (wo die Latenz wichtig ist) als auch im Hintergrund ausgeführt werden (wo die Akkulaufzeit priorisiert werden sollte).

Auswirkungen von Apps auf den Funkstatusautomaten

Jedes Mal, wenn Sie eine neue Netzwerkverbindung herstellen, wechselt das Funkmodul in den Vollleistungsstatus. Bei der oben beschriebenen typischen 3G-Funk-Zustandsmaschine bleibt die volle Leistung während der gesamten Übertragung und zusätzlich 5 Sekunden nach der Übertragung erhalten. Danach folgt ein Zeitraum von 12 Sekunden im Energiesparmodus. Bei einem typischen 3G-Gerät verbraucht das Funkmodul also mindestens 18 Sekunden lang Energie.

In der Praxis bedeutet dies, dass eine App, die eine Datenübertragung von einer Sekunde ausführt, drei Mal pro Minute aktiviert, bleibt das Funkgerät dauerhaft aktiv, wie im Stand-by-Modus wieder mit hoher Leistung.


Abbildung 2: Relativer Verbrauch der drahtlosen Funkenergie für eine Übertragung von einer Sekunde, die dreimal pro Minute ausgeführt wird. Die Abbildung enthält keine Latenz für das Einschalten zwischen den einzelnen Durchläufen.

Im Vergleich dazu würde die Funkschnittstelle bei derselben App, die ihre Datenübertragungen bündelt und jede Minute eine einzelne dreisekündige Übertragung ausführt, insgesamt nur 20 Sekunden pro Minute im Hochleistungsmodus bleiben. So kann das Funkgerät 40 Sekunden pro Minute im Standby-Modus bleiben, was zu einer deutlichen Reduzierung des Akkuverbrauchs führt.


Abbildung 3: Relativer Akkuverbrauch für 3-sekündige Übertragungen jede Minute ausgeführt wird.

Optimierungstechniken

Du weißt jetzt, wie sich der Netzwerkzugriff auf die Akkulaufzeit auswirkt. mit denen Sie den Akkuverbrauch senken können, eine schnelle und flüssige Nutzererfahrung bieten.

Datenübertragungen bündeln

Wie bereits im vorherigen Abschnitt erwähnt, ist es eine der besten Möglichkeiten, die Akkueffizienz zu verbessern, wenn Sie Ihre Datenübertragungen bündeln, sodass Sie mehr Daten seltener übertragen.

Das ist natürlich nicht immer möglich, wenn Ihre App Daten sofort als Reaktion auf eine Nutzeraktion empfangen oder senden muss. Sie können dies abmildern, indem Sie Daten antizipieren und vorab abrufen. Andere Szenarien, z. B. das Senden von Protokollen oder Analysen an einen Server und andere nicht dringende, von der App initiierte Datenübertragungen, eignen sich sehr gut für Batch- und Bündelungsfunktionen. Weitere Informationen finden Sie unter Optimieren per App initiiert Aufgaben für zur Planung von Netzwerkübertragungen im Hintergrund.

Daten vorabrufen

Der Vorabruf von Daten ist eine weitere effektive Möglichkeit, die Anzahl unabhängiger Datenübertragungssitzungen, die Ihre App ausführt. Beim Vorabladen wird bei einer Nutzeraktion in Ihrer App vorhergesagt, welche Daten für die nächste Reihe von Nutzeraktionen am wahrscheinlichsten benötigt werden. Diese Daten werden dann in einem einzigen Burst über eine einzelne Verbindung mit voller Kapazität abgerufen.

Durch das Frontloading Ihrer Übertragungen verringern Sie die Anzahl der Funkaktivierungen die zum Herunterladen der Daten erforderlich sind. So sparen Sie nicht nur Akkulaufzeit, sondern verbessern auch die Latenz, senken die erforderliche Bandbreite und verkürzen die Downloadzeiten.

Der Vorabruf verbessert auch die Nutzerfreundlichkeit, da weniger In-App-Inhalte Latenz, die dadurch verursacht wird, dass vor dem Ausführen einer Aktion auf den Abschluss von Downloads gewartet wird oder das Anzeigen von Daten.

Hier ist ein Beispiel aus der Praxis.

Nachrichtenleser

Viele Nachrichten-Apps versuchen, die Bandbreite zu reduzieren, indem sie Schlagzeilen erst nach einer vollständige Artikel nur, wenn der Nutzer sie lesen möchte, und Thumbnails, wenn sie sichtbar sind.

Bei dieser Herangehensweise ist das Radio zum Großteil aktiv. der Nutzer beim Lesen von Schlagzeilen, Wechseln zwischen Kategorien und Artikel zu lesen. Der ständige Wechsel zwischen Energiezuständen führt zu einer erheblichen Latenz beim Wechseln der Kategorien oder beim Lesen Artikel.

Besser ist es, beim Starten eine angemessene Menge an Daten vorab zu laden, beginnend mit den ersten Nachrichtenüberschriften und -miniaturansichten. So wird eine kurze Startzeit sichergestellt. Danach folgen die restlichen Überschriften und Miniaturansichten sowie der Artikeltext für jeden Artikel, der mindestens in der Liste der Hauptüberschriften verfügbar ist.

Eine weitere Alternative besteht darin, alle Überschriften, Thumbnails, Artikeltexte und möglicherweise sogar vollständige Artikelbilder vorab zu laden – in der Regel im Hintergrund nach einem vordefinierten Zeitplan. Bei diesem Ansatz besteht das Risiko, dass viel Bandbreite und Akkulaufzeit für den Download von Inhalten verbraucht werden, die nie verwendet werden. Daher sollte er mit Vorsicht eingesetzt werden.

Zusätzliche Überlegungen

Vorabruf von Daten hat zwar viele Vorteile, wird aber zu aggressiv eingesetzt der Vorabruf birgt auch das Risiko einer erhöhten Akkuentladung und erhöhter Bandbreite. der Nutzung und des Downloadkontingents durch den Download nicht verwendeter Daten. Außerdem ist es wichtig, dass das Vorabladen das Starten der Anwendung nicht verzögert, während die App auf den Abschluss des Vorabladens wartet. In der Praxis könnte das progressive Verarbeitung von Daten oder das Initiieren aufeinanderfolgender Übertragungen priorisierter damit die für den Start der Anwendung erforderlichen Daten heruntergeladen und verarbeitet werden .

Wie aggressiv Sie Daten im Voraus abrufen, hängt von der Größe der heruntergeladenen Daten und der Wahrscheinlichkeit ab, dass sie verwendet werden. Als grober Anhaltspunkt basierend auf dem Zustandsautomat für Daten, bei denen die Wahrscheinlichkeit, dass sie verwendet werden, bei 50% liegt innerhalb der aktuellen Nutzersitzung einen Prefetch für etwa 6 Sekunden (ca. 1 bis 2 Megabyte) vor den potenziellen Kosten für den Download nicht verwendeter Daten den potenziellen Einsparungen entsprechen, wenn diese Daten nicht heruntergeladen werden.

Im Allgemeinen ist es empfehlenswert, Daten vorab zu laden, damit Sie nur alle zwei bis fünf Minuten einen weiteren Download in der Größenordnung von 1 bis 5 Megabyte starten müssen.

Gemäß diesem Prinzip sollten große Downloads wie Videodateien in regelmäßigen Abständen (alle 2 bis 5 Minuten) in mehreren Teilen heruntergeladen werden, sodass nur die Videodaten vorab abgerufen werden, die in den nächsten Minuten wahrscheinlich angesehen werden.

Eine Lösung besteht darin, den vollständigen Download nur dann zu planen, wenn eine Verbindung zu WLAN und möglicherweise nur, wenn das Gerät geladen wird. Die WorkManager API unterstützt genau diesen Anwendungsfall, sodass Sie die Hintergrundarbeit bis das Gerät die vom Entwickler angegebenen Kriterien wie Aufladen und mit dem WLAN verbunden ist.

Verbindung prüfen, bevor Anfragen gesendet werden

Die Suche nach einem Mobilfunksignal ist einer der ressourcenintensivsten Vorgänge auf einem Mobilgerät. Bei von Nutzern initiierten Anfragen empfiehlt es sich, zuerst mit ConnectivityManager nach einer Verbindung zu suchen, wie in Verbindungsstatus und Verbindungsmessung überwachen gezeigt. Wenn kein Netzwerk verfügbar ist, kann die App den Akku schonen, da das Mobilfunkradio nicht zur Suche gezwungen wird. Die Anfrage kann dann geplant und in einem Batch mit anderen Anfragen ausgeführt werden, sobald eine Verbindung hergestellt wurde.

Poolverbindungen

Eine weitere Strategie, die zusätzlich zu Batching und Prefetching hilfreich sein kann, ist das Bündeln der Netzwerkverbindungen Ihrer App.

In der Regel ist es effizienter, vorhandene Netzwerkverbindungen wiederzuverwenden, um neue zu initiieren. Durch die Wiederverwendung von Verbindungen kann das Netzwerk auch Intelligenter auf Überlastungen und damit verbundene Probleme mit Netzwerkdaten reagieren.

HttpURLConnection und die meisten HTTP-Clients wie OkHttp aktivieren standardmäßig das Verbindungs-Pooling und verwenden dieselbe Verbindung für mehrere Anfragen.

Zusammenfassung und Ausblick

In diesem Abschnitt haben Sie viel über drahtloses Radio und einige Strategien gelernt. die Sie allgemein anwenden können, um eine schnelle, responsive Nutzererfahrung zu bieten, während damit sich der Akku schneller entlädt.

Im nächsten Abschnitt werden drei verschiedene Arten von Netzwerkinteraktionen, die in den meisten Apps auftreten. Sie lernen die Treiber für die einzelnen sowie moderne Techniken und APIs zur Verwaltung dieser effizient kommunizieren können.