10 Stimmen

Was ist die Definition von "schlafen" für ein Android-Gerät?

Ich benutze

alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, 0, DURATION, broadcast);

Zur Planung einer wiederkehrenden Aufgabe, die nur ausgeführt werden soll, wenn das Gerät nicht schläft. So wie ich das verstehe API auf dem AlarmManager wird die Absicht aufgerufen, sobald das Gerät aus dem Ruhezustand erwacht.

Und wann schläft ein Android-Gerät? Zum Testen habe ich die Dauer auf zwei Minuten eingestellt und das Gerät an meinen Rechner angeschlossen. Jetzt beobachte ich logcat und alle zwei Minuten spuckt es meine Debug-Meldung aus.

Ich dachte immer, dass ein deaktivierter Bildschirm bedeutet, dass das Gerät in den Ruhezustand geht. Oder hindert mein Blick auf die Debug-Ausgabe das Gerät am Schlafen? Ich habe auch die USB-Verbindung getrennt und mir das Protokoll nach einer halben Stunde angesehen, und ich konnte einen Aufruf meines Timer-Codes sehen, auch wenn das Display mehr als 15 Minuten lang dunkel war.

Wie kann ich überprüfen, ab welchem Zeitpunkt der Befehl nicht mehr ausgeführt wird und worauf sich das Einschlafen in der AlarmManager-Dokumentation bezieht? Gibt es eine Möglichkeit, der logcat-Ausgabe zu entnehmen, wann das Gerät zu schlafen begann?

8voto

Mike dg Punkte 4568

Ein ausgeschalteter Bildschirm bedeutet nicht unbedingt, dass das Gerät schläft. Anwendungen können Wecksperren anfordern, die das Gerät wach halten, während der Bildschirm ausgeschaltet ist. Wenn eine andere Anwendung einen Timer hat, der keine ungenauen Wiederholungen verwendet, dann wird das Gerät auch für diese Anwendung aufgeweckt.

Abhängig von der Android-Version Ihres Geräts finden Sie ein Diagramm Ihrer Aufwachzeit unter Einstellungen - > Über das Telefon -> Akkuverbrauch -> Klicken Sie dann auf das Diagramm oben. Weitere Informationen zu Wecksperren finden Sie unter http://developer.Android.com/reference/Android/os/PowerManager.html

7voto

Krzysztof Wolny Punkte 9560

Das Gerät befindet sich im Ruhezustand, wenn keine Anwendung läuft, die es daran hindert, zu schlafen. Also: 1. Der Bildschirm ist ausgeschaltet (während er eingeschaltet ist, läuft immer eine Anwendung, z. B. Launcher) 2. Es gibt keinen laufenden Dienst (z. B. Musik, Downloads) - keine CPU-Sperren.

AlarmManager weckt das Gerät aus dem Ruhezustand und führt aus, was ausgeführt werden soll. Kritisch ist z.B. das Beenden eines Dienstes, der im Broadcast Receiver von Alarm erstellt wurde, um das Gerät wieder einschlafen zu lassen. Wenn Sie etwas Längeres und Wichtiges im Hintergrund machen, sollten Sie eine CPU-Sperre für Ihre App einrichten, um zu verhindern, dass sie von Android OS beendet wird.

Was meinen Sie genau mit "Wie kann ich überprüfen, ab welchem Zeitpunkt der Befehl nicht mehr ausgeführt wird"? Welcher Befehl?

Aus JavaDoc:

Registrierte Alarme werden beibehalten, während das Gerät im Ruhezustand ist (und kann optional das Gerät aufwecken, wenn sie wecken, wenn sie während dieser Zeit ausgelöst werden), werden aber gelöscht, wenn es ausgeschaltet und neu gebootet wird.

So hält OS alle Alarme fest, das Gerät kann durch den Alarm geweckt werden, der ertönt, während es schläft. Alarme werden nach einem Neustart gelöscht (Sie sollten sie in der DB speichern und nach einem Neustart wiederherstellen).

"Gibt es eine Möglichkeit, in der Logcat-Ausgabe zu sehen, wann das Gerät zu schlafen begann?" Da ich weiß, dass es das nicht gibt, kann ich so etwas nur sehen, wenn der Bildschirm ausgeht:

*** set_screen_state 0 von "power" Tag

IMHO sollten Sie sich nicht um den Schlafmodus kümmern, sondern Ihre App zu einem "guten Android-Bürger" machen, indem Sie bei Bedarf den Bildschirm aus- und einschalten (Intent.ACTION_SCREEN_OFF), Dienste so schnell wie möglich beenden, Ressourcen (Netzwerk, GPS, CPU) so schnell wie möglich freigeben, ungenaue Alarme, Download-Manager und alle guten Mitarbeiter des Betriebssystems verwenden. Ich glaube, dass Android CPU-Schlafphasen transparent behandelt.

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