2 Stimmen

Energieverwaltung in Symbian

Gibt es "bewährte Praktiken" für die Erstellung eines stromsparenden Hintergrund Anwendung in Symbian?

Gibt es insbesondere eine Möglichkeit (d. h. eine API) für eine Symbian-Anwendung, dem Betriebssystem Hinweise auf ihren aktuellen Zustand zu geben, um den Akkuverbrauch zu senken? In Android gibt es zum Beispiel das Konzept der Wake Locks die verhindert, dass das Gerät in den Standby-Modus geht - gibt es etwas Ähnliches in Symbian?

EDIT。
Gibt es irgendwelche Auswirkungen, wenn der Code als separater Thread mit der Open-C-Bibliothek ausgeführt wird und nicht als "natives" Symbian C++, mit Active Objects usw.? (der Open-C-Code blockiert die meiste Zeit auf IO).

3voto

Haspemulator Punkte 10750
  1. Sie können die (Un-)Aktivität des Benutzers mit einer RTimer::Inactivity()-Methode überprüfen. Dieser Weg ist beschrieben in Forum Nokia Wiki-Seite . Dort ist auch beschrieben, wie Sie den Inaktivitäts-Timer zurücksetzen können.
  2. Mit der HAL-API können Sie überprüfen, ob der Bildschirm des Geräts ein- oder ausgeschaltet ist. Siehe Klassen HAL und HALData. Sie können einen solchen Aufruf verwenden:

TInt displayState; HAL::Get(HALData::EDisplayState, displayState); Und der displayState hält entweder 0, wenn das Display ausgeschaltet ist, oder 1 im anderen Fall.

Mit diesen APIs wissen Sie, ob der Benutzer gerade aktiv ist, so dass Sie das Verhalten Ihres Hintergrunddienstes ändern können, um seinen Stromverbrauch zu senken.

Sie können auch Folgendes verwenden Nokia Energie-Profiler Anwendung zur Aufzeichnung des Stromverbrauchs des Mobiltelefons, mit verschiedenen Energiesparoptionen Ihres Hintergrunddienstes. Bitte beachten Sie auch Nokias Dokument Beschreibung der besten Praktiken zur Energieeinsparung des Geräts. Dieses Dokument ist recht einfach, aber dennoch nützlich.

Ich hoffe, das hilft.

EDIT。 Über separates Gewinde und Open C. Soweit ich weiß, ist Open C nur ein Plugin und alle Implementierungen sind nach wie vor "native Symbian". Solange Sie also das periodische Abfragen einiger Ressourcen vermeiden und nur das übliche blockierende IO verwenden, ist Ihr Code genauso energiesparend wie die Standard-Symbian-Active-Objects-Techniken (die Symbian-spezifische Semaphoren zum Blockieren von Threads verwenden).

1voto

Shane Powell Punkte 12660

Ich habe in Symbain nichts Besonderes gefunden, um das Gerät aus dem Standby-Modus zu holen. Im Grunde wären die "besten Praktiken" die gleichen wie bei allen mobilen Geräten:

  • Warten Sie nicht in einer Schleife auf Dinge, verwenden Sie immer die auf der Plattform verfügbaren Signalisierungsdienste, z.B. Symbain ActiveObjects / User::WaitForXxx
  • Begrenzung der Anzahl der Hintergrund-Threads (derzeit sind alle mobilen Geräte noch auf 1 CPU beschränkt...)
  • Bleiben Sie nicht an Systemdiensten hängen, schließen Sie sie so schnell wie möglich (das ist normalerweise der Hauptakkuverbraucher in meinen mobilen Anwendungen, und manchmal kann es sehr mühsam sein, herauszufinden, welcher Systemdienst den größten Akkuverbrauch verursacht; WinMo ist in dieser Hinsicht sehr schlecht).

Für mich ist es meist eine Abwägung zwischen Akkulaufzeit und Leistung/Reaktionsschnelligkeit für die jeweilige Anwendung. Leider scheinen die Mächtigen sich immer auf die Seite der Leistung/Reaktionsfähigkeit zu schlagen und verdammen den Batterieverbrauch.....

1voto

James Punkte 8887

Geben Sie Ihrer Anwendung eine niedrige Priorität (siehe RProcess- und RThread-Klassen). Ihre Vorgehensweise hängt davon ab, was Ihre Hintergrundanwendung macht. Diese Dinge verbrauchen die meiste Batterie: Funk (GSM/3G/WIFI/BlueTooth), Bildschirmhintergrundbeleuchtung, Dateizugriffe.

Symbian OS wird immer versuchen, Ihre Anwendung in den Ruhezustand zu versetzen, Sie müssen es nicht dazu auffordern. Stellen Sie nur sicher, dass Ihr Ansatz ihm die Möglichkeit gibt, die Anwendung in den Ruhezustand zu versetzen.

0voto

Rakesh Gondaliya Punkte 1225

Die Energieverwaltung ist ein sehr wichtiges Thema bei der Entwicklung von Anwendungen.

Bei Symbian hängt es davon ab, was Sie für die Ausführung von Hintergrundaktivitäten verwenden.

Unabhängig davon, ob Sie ein Thread- oder ActiveX-Steuerelement verwenden.

Z.B. entwickeln Sie Anwendungsbrowser, den Sie den Browser wünschen, um etwas dann herunterzuladen, dass herunterladende Tätigkeit im Hintergrund gehen sollte und fähige Tätigkeit beginnt und wenn, um Fortschritt zu zeigen und wenn es beendet, es wieder zum Vorderende kommen sollte.

Es hängt davon ab, wie Sie die Fäden verwalten, wenn Sie Fäden verwenden. Sie können tun, wie welcher Thread zu pausieren, wenn die lange Zeit, die Aktivität beginnt und wann wieder aufnehmen, wenn die Hintergrundaktivität Ausführung beendet hat.

In der Tat ist dies ein sehr gutes Thema, auf das Sie gestoßen sind

0voto

Ola Punkte 712

Früher gab es einen Inaktivitäts-Timer, der von der Anwendung zurückgesetzt werden konnte. Dadurch wurde verhindert, dass der Bildschirm in den Bildschirmschonermodus wechselte.

Wenn Sie die verschiedenen asynchronen Funktionen in Symbian verwenden, wird Ihre Anwendung zum richtigen Zeitpunkt ausgeführt.

Je nach Ihren Bedürfnissen sollte eine dieser Methoden funktionieren. Wenn Sie genauer beschreiben, was Sie erreichen wollen, kann ich Ihnen besser helfen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X