2016-03-28 6 views
6

Ich baue eine Musik-Streaming-App für Android."Battery Saver" -Funktion tötet meinen Musikdienst

In dieser App habe ich eine Service, die für die Wiedergabe von Audio von einem HTTP-Server zuständig ist. Bevor ich spiele, stelle ich sicher, startForeground() und erwerben Sie eine teilweise WakeLock, so dass mein Dienst nicht getötet wird. Ich bekomme auch eine WifiLock, nur für den Fall.

Der Dienst funktioniert gut ... solange mein Telefon nicht im "Batteriesparmodus" ist. In dem Moment, in dem ich den Akku einschalte und mein Telefon von der Stromquelle abkopple, wird mein Dienst mit Feuer getötet!

Leider scheint es nicht einmal, dass onDestroy() aufgerufen wird, so bleibt meine Benachrichtigung von startForeground() sichtbar, auch wenn der Dienst tot ist.

Das Telefon ist ein Samsung Galaxy S6, mit Android 6.0.1 drauf.

Zwei Fragen:

  1. Gibt es eine Möglichkeit ich den Dienst am Leben trotz des Batteriespar Dingens halten kann?
  2. Wenn nicht, möchte ich zumindest wissen, wenn mein Dienst getötet wird, so dass ich ein wenig aufräumen kann (entfernen Sie die Benachrichtigung & interne Sachen).

Irgendwelche Vorschläge?

+0

Haben Sie eine Lösung für dieses Problem zu finden? Ich habe ähnlichen Fall - je nach Gerät und genaue Android-Version entweder App oder Wifi-Verbindung wird gestoppt ignoriert alle wakelocks – mhenryk

+0

Ich weiß nicht, irgendeine Lösung für das. Nicht sicher ist es sogar in Android 7 eigentlich behoben worden ... Meine App war nicht die Einzige: Selbst Google Musik und Spotify hatten das Problem. – aspyct

+0

Android 7 hat immer noch das Problem. Danke für die Information. – mhenryk

Antwort

0

Dies ist möglich, indem ein Vordergrund-Service in einem separaten Prozess mit einem partiellen Wakelock verwendet wird.

android:process="process_name" 

(Dokumentation: http://developer.android.com/guide/topics/manifest/service-element.html)

Beachten Sie, dass Sie nicht SharedPreferences in einem Multi-Prozess-Umgebung verwendet werden soll.

Siehe auch diese Frage: https://code.google.com/p/android/issues/detail?id=193802

+1

Das scheint leider nicht zu funktionieren, es sei denn, ich mache etwas falsch. Ich habe verschiedene Verfahren für die Anwendung und Service, und immer noch keine Verbesserung. So etwas wie ''. Kannst du etwas falsch finden? – aspyct

+0

Ich denke, es war beabsichtigt, einen Dienst in einem separaten Prozess zu stellen –