App scheint nicht mehr zu funktionieren, wenn der Bildschirm in den Ruhezustand wechselt

8

Ich habe eine CPU-intensive, lang andauernde Operation (einige Stunden), die ich mit AsyncTask ausführe. Während es fortfährt, aktualisiert es eine Fortschrittsanzeige auf dem Bildschirm, um anzuzeigen, wie viel Prozent der Aufgabe erledigt ist.

Ich entdeckte, dass die Aufgabe zu stoppen scheint, wenn mein Bildschirm in den Ruhezustand geht (Timeout). Ich bin mir nicht sicher, ob das funktioniert, weil die AsyncTask aufhört oder beim Versuch, den Bildschirm zu aktualisieren, hängenbleibt (letzteres denke ich).

Wie kann ich verhindern, dass die Ausführung von AsyncTask unterbrochen wird, anstatt den Bildschirm nicht schlafen zu lassen? Und wenn das der einzige Weg ist, wie stelle ich dann sicher, dass der Bildschirm nicht schläft?

BEARBEITEN : Ich muss hinzufügen, dass ich weiß, dass sich das wie eine nicht benutzerfreundliche App anhört, die unten von jemandem kommentiert wurde. Dies ist eine sehr spezielle Aufgabe (es werden Tausende von Bilddateien verarbeitet, um die Verarbeitung auf verschiedenen Systemen zu vergleichen), und wird von einigen Benutzern intern verwendet, nicht für die Veröffentlichung.

    
OceanBlue 17.03.2011, 21:15
quelle

3 Antworten

20

Das ist erwartetes Verhalten. Die Idee ist, dass der Akku des Telefons wegen schlechter Apps nicht ausgelaufen sein soll. Wenn der Bildschirm ausgeschaltet ist, erwartet der Benutzer im Allgemeinen, dass das Telefon in den Ruhezustand versetzt wird.

Wenn Sie Ihre App ausführen möchten, können Sie mit einem WakeLock das Telefon laufen lassen (bei ausgeschaltetem Bildschirm): Dokumentation hier und hier .

Beachten Sie, dass eine Wake-Sperre die WAKE_LOCK-Berechtigung erfordert, und Sie müssen dem Benutzer erneut klarstellen, dass Ihre App den Milchshake des Telefons trinkt, während dieser ausgeschaltet ist.

    
EboMike 17.03.2011, 21:19
quelle
6

Ich bin mir nicht sicher, ob irgendjemand das lesen wird, da das OP schon mehrere Jahre alt ist, aber ich bin im gleichen Boot, da ich ein Wakelock für eine App für den internen Gebrauch brauche und den Bildschirm nicht in Ordnung war Ich brauchte die CPU, damit ich einige Metriken-Abfragen ausführen konnte. Ich benutzte einfach einen partiellen Wakelock; zB:

%Vor%

Das funktionierte großartig, ohne Probleme

    
TwinPrimesAreEz 13.02.2014 18:15
quelle
1

Meine 2 Cent auf diesem alten Post, falls es jemandem helfen könnte. Wenn Sie nur verhindern möchten, dass Ihr Bildschirm in den Ruhezustand wechselt, gibt es eine einfache Lösung, die keine Erlaubnis des Benutzers erfordert - und es sind nur zwei Codezeilen:

%Vor%

Ein wichtiger Hinweis: Es kann nur innerhalb von Activity aufgerufen werden - nicht von anderen App-Komponenten. Weitere Details finden Sie hier .

    
noamgot 10.02.2018 22:15
quelle

Tags und Links