Wie kann ich einen Dienst auf unbestimmte Zeit am Leben erhalten?

8

Ich schreibe eine App, die Ton von der Kopfhörerbuchse erkennt und Intents überträgt, wenn bestimmte Audio-Bedingungen erfüllt sind (insbesondere wenn das Lesen einer Karte durch ein zusätzliches Audiogerät erfolgt).

Meine App hat keine Aktivitäten, es ist nur eine Anwendung und ein Dienst.

Alles funktioniert gut, außer dass der Dienst nach relativ kurzer Zeit (~ eine Minute) von Android bereinigt wird.

Ich bin neugierig, was ich tun muss, um Android zu sagen, dass dies ein nützlicher Dienst ist und dass er es in Ruhe lassen sollte, es sei denn, es benötigt WIRKLICH seinen Speicher zurück. Ich stelle fest, dass ich einen Alarm erzeugen kann, der alle paar Sekunden aufwacht und den Dienst hochfeuert, wenn er bemerkt, dass er nicht da ist, aber das scheint wie ein Kluge zu sein. Gibt es einen Android (y) Weg, um es am Leben zu erhalten?

    
Genia S. 13.08.2013, 21:37
quelle

4 Antworten

6
  

Meine App hat keine Aktivitäten, es ist nur eine Anwendung und ein Dienst.

Das bedeutet, dass Ihre App auf keinem Android 3.1 + -Gerät ausgeführt wird, es sei denn, Sie haben eine Verbindung zu einer anderen Anwendung, die Ihren Dienst manuell startet.

  

Ich schreibe eine App, die Ton von der Kopfhörerbuchse erkennt und Intents überträgt, wenn bestimmte Audio-Bedingungen erfüllt sind (insbesondere wenn das Lesen einer Karte über ein zusätzliches Audiogerät erfasst wird).

Nennen Sie Ihr Unternehmen nicht nach einer geometrischen Form - es wurde gemacht. : -)

  

Ich bin neugierig, was ich tun muss, um Android zu sagen, dass dies ein nützlicher Dienst ist und dass es es in Ruhe lassen sollte, es sei denn, es benötigt wirklich seinen Speicher zurück.

Sie können startForeground() gerne verwenden, um es als Vordergrunddienst zu deklarieren. Der Nachteil ist, dass Sie eine Notification anzeigen müssen, idealerweise eine, die es dem Benutzer ermöglicht, den Dienst zu stoppen. Denken Sie daran, dass Nutzer dieses Notification möglicherweise nicht schätzen, aber Sie sind fest damit, vor allem auf Android 4.3+ . Sie können besser bedient werden, wenn Sie von einem Dienst zu einer Aktivität wechseln, so dass der Benutzer diesen starten, eine Karte streichen und die Transaktion bearbeiten kann.

    
CommonsWare 13.08.2013, 22:02
quelle
3

Verwenden Sie START_STICKY, um Ihren Service aufrechtzuerhalten.

%Vor%

Beispiel Verwendung:

Ссылка

Weitere Informationen:

Ссылка

    
blackcj 13.08.2013 21:55
quelle
1

Ich habe AlarmManager probiert. Es klappt. Ich habe Contex.startService () im AlarmReceiver verwendet. Und ich kann überprüfen, ob mein Dienst läuft, um zu entscheiden, ob der Dienst erneut gestartet werden soll. Auch wenn mein Dienst von Benutzern manuell in den Einstellungen gestoppt oder durch eine Reinigungs-App beendet wird, kann der Dienst erneut gestartet werden. Hier ist der Hauptcode unten.

%Vor%     
peacepassion 25.06.2014 07:20
quelle
0

Sie können den Benutzer nicht so einstellen, dass er Ihren Dienst manuell über die Einstellungen, die Dienste ausführen, beendet. Auch als Geräteadministrator.

Sie können Boot-Empfänger, Bildschirm Schließfach und was auch immer Ereignisse, die den getöteten Dienst neu starten und App, wenn Sie auch den Dienst mit einer Flag-Einstellungen neu starten können, wenn mit einer App getötet tötete Advanced Task Killer .

    
user529543 13.08.2013 21:42
quelle

Tags und Links