In diesem Dokument werden Best Practices zur Optimierung des Stromverbrauchs in einer mobilen Navigations-App beschrieben, die Sie mit dem Navigation SDK erstellen. Gleichzeitig werden die Kompromisse beschrieben, die bei der Anwendung dieser Praktiken zu berücksichtigen sind. In diesem Dokument wird insbesondere Folgendes behandelt:
- Quellen mit hohem Stromverbrauch, sortiert von der höchsten zur niedrigsten.
- Strategien zur Optimierung des Stromverbrauchs, nach Wichtigkeit geordnet, beginnend mit der Framerate.
- Strategien für Endnutzer, um Ihre App-Nutzer darüber zu informieren, wie sie die Gerätenutzung während der Navigation verwalten können.
Warum sollten Sie Ihre Navigations-App optimieren?
Je nach Situation verwenden Ihre App-Nutzer die Navigationsanleitung möglicherweise über einen längeren Zeitraum. Fahrer und Lieferkuriere können beispielsweise lange arbeiten und Aufträge in unbekannten Gebieten ausführen. In diesen Fällen verlassen sie sich stark auf die detaillierte Routenführung in der App. Daraus ergeben sich einige typische Probleme:
- Akkuverbrauch und Verfügbarkeit von Ladegeräten: Eine intensive Nutzung der Navigation kann dazu führen, dass sich der Akku des Geräts schneller als erwartet entlädt. Viele Nutzer können dieses Problem beheben, indem sie ihr Gerät im Fahrzeug aufladen. Zweiradfahrer haben diese Möglichkeit jedoch nicht.
- Gerätedrosselung aufgrund von Hitze: Auch bei Nutzern, die ihr Gerät ständig aufladen, können Probleme auftreten. Ein hoher Stromverbrauch über einen längeren Zeitraum kann dazu führen, dass sich das Gerät erwärmt. Dies führt zu einer thermischen Drosselung und einem anschließenden Leistungsverlust.
Apps für die detaillierte Routenführung sind auf energieintensive Funktionen wie das Display, GPS und die Funkkommunikation mit Mobilfunkmasten angewiesen. Daher empfiehlt es sich, den Energieverbrauch Ihrer mobilen App zu optimieren. Außerdem sollten Sie den Energiebedarf Ihrer Zielgruppe berücksichtigen, um einen geeigneten Kompromiss zwischen Leistung und Energieverbrauch zu finden.
Was verbraucht am meisten Strom?
In diesem Abschnitt werden die In-App-Aktivitäten, die mit einem hohen Stromverbrauch verbunden sind, in zwei Kategorien unterteilt:
- Bildschirm-Rendering
- Standortaktualisierungen
Bildschirm-Rendering
Das Rendern des Bildschirms verursacht in der Regel den höchsten Stromverbrauch in mobilen Navigations-Apps. Jedes Mal, wenn das Gerät eine Karte und andere UI-Elemente auf dem Bildschirm darstellt, werden GPU und CPU beansprucht. Wenn der Nutzer das Display über einen längeren Zeitraum eingeschaltet lässt, wird ebenfalls mehr Strom verbraucht.
Fahrer, die sich bei der Navigation auf eine sichtbare Karte verlassen, haben in der Regel einen hohen Stromverbrauch, insbesondere wenn sie die App viele Stunden lang ununterbrochen verwenden. In diesem Szenario wird die Karte in Echtzeit aktualisiert, sodass die App auch eine höhere Renderingrate auf dem Bildschirm ausführt. In einigen Fällen kann der Bildschirm fast kontinuierlich neu gezeichnet werden, insbesondere wenn der Nutzer ohne Unterbrechung von Ort zu Ort fährt.
Standortaktualisierungen
Neben dem Bildschirm-Rendering verbrauchen zwei weitere Navigationsaktivitäten Akkuleistung:
- Nutzung von Mobilfunkmasten und GPS
- Standortaktualisierungen und -freigabe, z. B. um eine voraussichtliche Ankunftszeit anzugeben oder die Positionen eines Fahrzeugs in einer Flotte zu melden.
Sowohl die GPS- als auch die Mobilfunkkommunikation sind auf energieintensive Startvorgänge angewiesen: GPS muss Satelliten finden und Mobilfunkschnittstellen müssen mit Mobilfunkmasten kommunizieren und eine Verbindung herstellen. Aus diesen Gründen laufen sie während der Navigation im Wesentlichen kontinuierlich, obwohl die Mobilfunkschnittstellen 20–30 Sekunden lang aktiv bleiben, um die Startkosten zu minimieren. Das Betriebssystem steuert diese Einstellungen, die Sie in Ihrer App nicht einfach konfigurieren können.
Bei Standort-Updates variiert der Stromverbrauch aufgrund unvorhersehbarer Faktoren. Beispielsweise bestimmt die Entfernung zwischen dem Gerät und der Mobilfunk-Basisstation den Stromverbrauch, da das Gerät das minimale Signal verwendet, das für die Navigation erforderlich ist, um einen Wechsel des Mobilfunkmasts zu vermeiden. Daher verbraucht ein Gerät, das sich in einem Gebiet mit schlechter Verbindung befindet, mehr Strom als ein Gerät, das sich in der Nähe einer Basisstation befindet. Außerdem können einige Apps Standortaktualisierungen an einen zentralen Flottenverwaltungsdienst weitergeben und müssen dazu mit einem Server kommunizieren.
Stromverbrauch deiner App optimieren
Die Herausforderung bei der Optimierung des Energieverbrauchs in Navigations-Apps besteht darin, dass diese Apps stark von energieintensiven Ressourcen abhängen. Das schränkt Ihre Möglichkeiten ein, die Auswirkungen zu minimieren, ohne Kompromisse einzugehen, z. B. die Nutzung des Displays einzuschränken. In diesem Abschnitt finden Sie eine Liste von Ansätzen, die Sie bei der Optimierung Ihrer App verfolgen können, sortiert nach ihrer Wirkung.
Framerate ändern
Der Bildschirm aktualisiert die Anzeige mit einer Frequenz, die als Framerate bezeichnet wird und normalerweise in Bildern pro Sekunde (FPS) gemessen wird. Da das Rendern des Bildschirms erhebliche CPU- und GPU-Verarbeitung erfordert, können Sie die Framerate reduzieren, um Strom zu sparen.
Wenn Sie die Framerate reduzieren, werden das Kartenrendering und interaktive Gesten (z. B. Schwenken, Zoomen oder Drehen) möglicherweise weniger flüssig dargestellt. Um ein ausgewogenes Verhältnis zwischen Energieeffizienz und einer reaktionsschnellen Nutzererfahrung zu erreichen, können Sie eine niedrige Baseline-Framerate beibehalten und sie bei aktiven Nutzerinteraktionen dynamisch erhöhen.
Auf iOS-Geräten stellt das Maps SDK for iOS die Property preferredFrameRate fürGMSMapView bereit, um die Framerate zu steuern. In der folgenden Tabelle sind die GMSFrameRate-Werte aufgeführt, die Sie anpassen können:
| Swift-Wert | Objective-C-Wert | Beschreibung |
|---|---|---|
.powerSave |
kGMSFrameRatePowerSave |
Verwenden Sie die minimale Framerate, um den Akku zu schonen. |
.conservative |
kGMSFrameRateConservative |
Verwenden Sie eine mittlere Framerate, um ein flüssigeres Rendering zu ermöglichen und Verarbeitungszyklen zu sparen. |
.maximum |
kGMSFrameRateMaximum |
Verwenden Sie die maximale Framerate für ein Gerät (30 fps für Low-End-Geräte, 60 fps für High-End-Geräte). |
Weitere Informationen finden Sie in der Dokumentation zum Navigation SDK for iOS unter GMSFrameRate.
Wenn Sie die bevorzugte Framerate direkt festlegen möchten, weisen Sie mapView.preferredFrameRate einen Wert zu:
Swift
// Reduce the frame rate to conserve battery:
mapView.preferredFrameRate = .powerSave
Objective-C
// Reduce the frame rate to conserve battery:
mapView.preferredFrameRate = kGMSFrameRatePowerSave;
Framerate während Gesten dynamisch anpassen
Niedrigere Frameraten können dazu führen, dass Nutzerinteraktionen wie Schwenken, Zoomen und Drehen abgehackt wirken. Du kannst die Interaktionen flüssig halten und gleichzeitig Energie sparen, indem du die Framerate während Nutzergesten vorübergehend auf das Maximum erhöhst und dann nach Beendigung der Geste wieder zu einer energiesparenden Framerate zurückkehrst.
Übernehmen Sie dazu das Protokoll GMSMapViewDelegate und implementieren Sie die folgenden Methoden:
- Prüfen Sie in
mapView:willMove:, ob die Kamerabewegung durch eine Nutzergeste initiiert wurde. Wenngesturetrueist, setzen SiepreferredFrameRateauf das Maximum. - In
mapView:idleAtCameraPosition:wirdpreferredFrameRatein den Energiesparmodus versetzt, wenn die Kamera inaktiv wird.
Das folgende Codebeispiel zeigt, wie die Framerate bei Nutzergesten dynamisch angepasst wird:
Swift
class YourViewController: UIViewController {
@IBOutlet weak var mapView: GMSMapView!
override func viewDidLoad() {
super.viewDidLoad()
mapView.delegate = self
// Set a baseline low frame rate to conserve power:
mapView.preferredFrameRate = .powerSave
}
}
// MARK: - GMSMapViewDelegate
extension YourViewController: GMSMapViewDelegate {
func mapView(_ mapView: GMSMapView, willMove gesture: Bool) {
// Increase frame rate during user gestures for smooth interaction:
if gesture {
mapView.preferredFrameRate = .maximum
}
}
func mapView(_ mapView: GMSMapView, idleAt position: GMSCameraPosition) {
// Restore the power-saving frame rate when gestures finish:
mapView.preferredFrameRate = .powerSave
}
}
Objective-C
@interface YourViewController : UIViewController <GMSMapViewDelegate>
@end
@implementation YourViewController {
GMSMapView *_mapView;
}
- (void)viewDidLoad {
[super viewDidLoad];
_mapView.delegate = self;
// Set a baseline low frame rate to conserve power:
_mapView.preferredFrameRate = kGMSFrameRatePowerSave;
}
#pragma mark - GMSMapViewDelegate
- (void)mapView:(GMSMapView *)mapView willMove:(BOOL)gesture {
// Increase frame rate during user gestures for smooth interaction:
if (gesture) {
mapView.preferredFrameRate = kGMSFrameRateMaximum;
}
}
- (void)mapView:(GMSMapView *)mapView
idleAtCameraPosition:(GMSCameraPosition *)position {
// Restore the power-saving frame rate when gestures finish:
mapView.preferredFrameRate = kGMSFrameRatePowerSave;
}
@end
Ohne Karte navigieren
Sie können zwar nicht steuern, wie der Endnutzer die Bildschirmhelligkeit seines Geräts einstellt oder wie lange er das Display eingeschaltet lässt, aber Sie können eine Option für die Navigation ohne Karte anbieten. So kann der Endnutzer diese Option auswählen, um Strom zu sparen. Wenn Fahrer beispielsweise regelmäßig in derselben Gegend unterwegs sind, benötigen sie möglicherweise nicht so oft eine kartenbasierte Routenführung. Die Navigation ohne Karte kann aktiviert werden, indem Sie im Navigation SDK ein Ziel festlegen und die Routenführung starten, aber keine Karte anzeigen lassen.
Fügen Sie eine Codezeile hinzu, um die GMSMapView auszublenden:
mapView.isHidden = true
Das Navigation SDK aktualisiert weiterhin die an Straßen ausgerichteten Standorte, die voraussichtliche Ankunftszeit und die verbleibende Fahrstrecke. Ihre App kann weiterhin alle vom SDK ausgelösten Ereignisse abonnieren, während der Fahrer unterwegs ist. Das ist nicht für jeden Anwendungsfall geeignet und kein guter Rat, wenn der Fahrer die Karte sehen und visuellen Hinweisen folgen muss. Die folgenden Screenshots zeigen einen direkten Vergleich der Kartenansichten während der aktiven Navigation.
|
|
Dunklen Kartenstil verwenden
Sie können die Karte so gestalten, dass ein dunkles Design verwendet wird. Dadurch wird weniger Energie benötigt, um die Karte auf dem Bildschirm darzustellen.
Das Navigation SDK rendert seine Karten mit dem Google Maps SDK for iOS, das Optionen zum Gestalten aller Nicht-Navigationskartenansichten in Ihrer App enthält. Die Navigationsansicht unterstützt auch das Erzwingen des dunklen Modus. Aufgrund der unterschiedlichen Bildschirmtypen wirkt sich dies möglicherweise nicht auf alle Geräte gleich aus, kann aber in einigen Fällen zu potenziellen Energieeinsparungen führen. In einer aktuellen Studie wurde festgestellt, dass die Menge an Energie, die durch den dunklen Modus auf einigen Bildschirmen eingespart wird, davon abhängt, wie hell der Bildschirm zu Beginn ist. Beispielsweise spart der dunkle Modus auf Bildschirmen mit voller Helligkeit mehr Strom als auf Bildschirmen, deren Helligkeit bereits auf 30–50 % des Maximums eingestellt ist. Das ist wichtig, wenn du den dunklen Modus für deine Apps verwendest, da die Energieeinsparungen davon abhängen, wie der Endnutzer die Bildschirmhelligkeit einstellt.
Weitere Informationen zum Ändern der Navigations-UI finden Sie unter Navigations-UI ändern.
Für das cloudbasierte Gestalten von Karteninhalten ist eine Karten-ID erforderlich, die eine serverseitige Kartenkonfiguration darstellt, die in Ihrem Google Console-Projekt erstellt wurde. Weitere Informationen zum Erstellen einer Karten-ID finden Sie in der Entwicklerdokumentation zu Karten-IDs. Weitere Informationen zum Entwerfen und Bereitstellen eines cloudbasierten Kartenstils finden Sie in der Entwicklerdokumentation unter Cloudbasierte Kartenstile erstellen und verwalten.
Häufigkeit der GPS-Standortaktualisierung ändern
Wenn du den Stromverbrauch von Standort-Updates berücksichtigst, die vom Gerät gesendet werden, solltest du dich mehr auf die Häufigkeit der Standort-Updates als auf die Menge der gesendeten Daten konzentrieren.
Dies ist nichts, was Sie im Navigation SDK direkt steuern können. Dasselbe gilt für die Verwendung von Standortquellen ohne GPS (Mobilfunk und WLAN).
Nutzer schulen
Die Nutzer deiner App möchten vielleicht wissen, wie sie ihren Stromverbrauch optimieren können. Um den Stromverbrauch ihrer Apps zu reduzieren, sollten Nutzer Folgendes tun:
- Smartphone sperren
- Navigations-App im Hintergrund ausführen
- Navigation nach Möglichkeit ohne Karte verwenden
- Bildschirmhelligkeit verringern, entweder durch Verwendung des dunklen Modus für OLED- und AMOLED-Bildschirme oder durch Aktivieren der automatischen Helligkeit
- Gerät kühl halten
- Mit dem WLAN im Fahrzeug verbinden, falls verfügbar
Stromverbrauch messen
Du kannst professionelle Tools verwenden, um den Stromverbrauch zu messen, aber es ist oft schwierig oder teuer, sie zu beschaffen. Apps und IDE-Profiling-Tools wie Power Profiler in Android Studio und der Bereich „Akkunutzung“ in XCode Organizer messen den Stromverbrauch. Es kann jedoch schwierig sein, die Auswirkungen von Hintergrundprozessen zu entfernen oder eine Leistungsbaseline festzulegen, mit der die Messwerte verglichen werden können. In einigen Fällen können Geräteeinschränkungen den Zugriff auf die erforderlichen Daten verhindern.
Du kannst spezielle Hardware für das Energiemonitoring verwenden und die Konfiguration der Akkuverbindung ändern. Hierfür gibt es kommerzielle Produkte und Dienste. Beachten Sie, dass durch eine solche Änderung der Geräte die Garantie des Geräts erlöschen kann.