Es schien immer eine Art schwarze Magie zu sein, wie andere Apps ihre Dienste immer laufen lassen, aber meine wird jedes Mal vom System getötet.Wie man den Android-Dienst immer läuft?
Meine App sollte einen TCP-Socket für den Server geöffnet halten und Daten senden/empfangen, wenn sie verfügbar sind, also muss sie immer eingeschaltet bleiben.
Das ist, was ich bisher versucht habe:
1) in einem anderen Prozess den Dienst ausgeführt diese Zeile verwenden (auch mit einer zusätzlichen Leitung stopWithTask):
android:process="package.name.custom_process_name"
android:stopWithTask="false"
2) Neustart den Service, wenn diese Methoden erhalten genannt:
onTaskRemoved()
onDestroy()
3) In return START_STICKY
zu onStartCommand()
Methode
4) Überprüfen Sie, ob der Dienst noch ausgeführt wird, wenn diese Ereignisse eintreten:
android.net.wifi.WIFI_STATE_CHANGED
android.net.conn.CONNECTIVITY_CHANGE
- Here I an den Server die Socket-Verbindung am stoppen, wenn das Gerät keine Internetverbindung hat mehr und es Wiedereröffnung, wenn es bekommt eine Verbindung.
Doch mein Dienst wird immer zufällig (manchmal nach ein paar Stunden, manchmal nach ein paar Tagen) vom System beendet und startet nicht automatisch neu, bis ich die App wieder öffne.
Wie halten andere Apps, zum Beispiel Chat-Apps, ihre Dienste ständig verfügbar?
S.S .: Eine dauerhafte Benachrichtigung wäre die geringste Option.
Die meisten von ihnen sind Vordergrund-Dienste ('Service # startForeground') – pskink
Dies bedeutet, eine dauerhafte Benachrichtigung anzuzeigen, aber schauen Sie auf Facebook, WhatsApp, Viber, Pushbullet. Diese haben keine Vordergrundbenachrichtigung und sie laufen immer noch im Hintergrund. – Ibrahim
Warum denkst du, dass sie "die ganze Zeit im Hintergrund laufen"? – pskink