Ich habe einen Dienst, der für längere Zeit im Hintergrund ausgeführt werden muss. Ein Vordergrunddienst ist aufgrund der Benachrichtigung nicht geeignet. Es muss leise im Hintergrund laufen, wenn es umgeht. Es tut dies bereits und verhält sich wie es sollte. Das ist nicht mein Problem, das ist nur ein Hintergrund.Wie kann ich einen Android-Dienst, der vom Betriebssystem getötet wird, ordnungsgemäß verwalten?
Wenn der Service vom Benutzer getötet wird und onDestroy() aufgerufen wird, werden die Daten in der Datenbank gespeichert - kein Problem. Auch wenn das Telefon ausgeschaltet ist, habe ich einen Sendeempfänger, der auf Bildschirm ab/an hört. Wieder kein Problem dort zu speichern.
Das Problem ist, wenn das Betriebssystem den Dienst wegen zu wenig Arbeitsspeicher beendet. Der Dienst wird beendet und ich glaube nicht, dass onDestroy() aufgerufen wird. Wenn dies der Fall ist, werden meine Daten nicht gespeichert. Wenn also der Dienst getötet wird und seit einiger Zeit läuft, sind alle gesammelten Informationen verloren.
Nach all dem ist meine Frage: Wie sollte ich meine Ressourcen aufräumen und meine Daten speichern? Gibt es eine Möglichkeit, Code auszuführen, um meine Daten zu speichern, bevor das System meinen Dienst beendet? Ich habe erwogen, meinen Dienst in Abständen von einigen Minuten in der Datenbank zu speichern, um den Datenverlust zu reduzieren. Ich bin mir nicht sicher, wie gut das leistungsmäßig ist. Die Abfragen würden wahrscheinlich nur 30 Zeilen in einem Zeitraum von etwa 5 Minuten einfügen. Wahrscheinlich weniger.
Ich bin eine relativ neue Android-Entwicklung und habe mein Bestes versucht, um dieses Problem zu sehen, bevor Sie hierher kommen, um eine Frage zu stellen. Entschuldigung, wenn ich etwas übersehen habe.
Danke!
onDestroy sollte aufgerufen werden und Sie können dort Ihre Daten persistieren. Laden Sie es agaib, wenn der Dienst neu gestartet wird. –
onDestroy() wird nicht aufgerufen, wenn das System den Dienst aufgrund niedriger Ressourcen beendet. @BLAZURE - Die Dokumentation, die Sie verlinkt haben, ist für eine Aktivität. Korrigiere mich, wenn ich falsch liege, aber ein Service keine onPause() -Methode hat? –