2016-09-25 3 views
-2

Ich habe eine gestartete Service implementiert, die im Hintergrund weiterlaufen soll (onStartCommand returns START_STICKY). Auf einem 5.1-Gerät habe ich festgestellt, dass das Wischen des aktuellen Tasks von den letzten Tasks den Service auslöst und nicht neu gestartet wird, was auf einem 4.2-Gerät nicht der Fall ist.Android-App einfrieren, wenn im Hintergrund

Die Workarounds, die auf SO vorgeschlagen wurden, um einen Alarm zum Neustarten der service nach 1s zu setzen, funktionierten nicht.

Nach einigen Recherchen habe ich herausgefunden, dass unter den BATTERY Einstellungen, haben wir Optionen, um festzulegen, ob Anwendungen im Hintergrund einfrieren oder nicht. Das Standardverhalten besteht darin, die Hintergrundausführung einzufrieren.

Gibt es eine bestimmte permissions, die ich suchen muss, damit die App im Hintergrund weiterlaufen kann?

+0

BEARBEITEN: Der Dienst wurde mit startForeground() implementiert. Es ist ein bekanntes Problem, dass nach dem 4.4 der Dienst beendet wird, wenn die App aus dem aktuellen Bildschirm geklaut wird. Während einige Vorschläge gepostet wurden, haben sie für mich nicht geklappt. Ich habe jedoch festgestellt, dass es diesen spezifischen Schalter gibt, der hilft. Ich bin mir nicht sicher, ob wir das programmatisch überwinden können und daher meine Anfrage nach irgendwelchen Zeigern. –

Antwort

0

Hintergrund Probleme zu vermeiden, können Sie ui Updates im

protected void onPause() { 

Funktion Ihrer Aktivität vermeiden müssen.

Wenn Sie einen Dienst verwenden Für Android 2.0 oder höher können Sie die startForeground()-Methode verwenden, um Ihren Dienst im Vordergrund zu starten.

A gestarteten Dienst kann den startForeground verwenden (int, Notification) API den Dienst in einem Vordergrund Zustand zu versetzen, in dem das System sie die Auffassung ist etwas, was der Benutzer zu sein, ist aktiv bewusst und somit kein Kandidat zum Töten bei wenig Speicher.