2016-04-28 7 views
1

Ich entwickle eine App, um den Benutzerstandort zu verfolgen, wenn sie den Knopf Start drücken. Ich habe einen Dienst implementiert, um den Standort mit dem LocationListener aufzuzeichnen, und es funktioniert gut, aber ich habe einige schwere Tests gemacht und wenn ich einige Anwendungen öffne, werden meine App und mein Dienst zufällig durch Android getötet.Android App und ihr Dienst wird getötet, nachdem einige Anwendungen geöffnet wurden

Aber ich habe eine App namens Wikiloc heruntergeladen und mache den gleichen schweren Test, öffne mehrere Apps diese App wird nie getötet und ich sehe die App erstellt eine Benachrichtigung, die nicht entlassen werden kann. Kann es damit zusammenhängen, dass die App niemals vom System getötet wird?

Wie kann dies in meiner App erreicht werden? Muss ich den Benachrichtigungstrick machen? Wenn ja, wie wird es umgesetzt?

+0

Versuchen Sie, [sticky mode] (http://developer.android.com/intl/ru/reference/android/app/Service.html#START_STICKY) in Ihrem Dienst zu verwenden? – Alexander

+0

@Alexander ja, mein onStartCommand sieht so aus: '@Override public int onStartCommand (Absicht intent, int flags, int startId) { Log.e (TAG," onStartCommand "); runningService = true; super.onStartCommand (intent, flags, startId); zurück START_STICKY; } ' – xmarston

Antwort

0

Werfen Sie einen Blick auf die Dokumentation für den Android Service startForeground(int, Notification)here. Gemäß der Dokumentation:

Lassen Sie diesen Dienst im Vordergrund laufen und geben Sie die laufende Benachrichtigung an, die dem Benutzer in diesem Zustand angezeigt werden soll. Standardmäßig sind die Dienste im Hintergrund ausgeführt, dh wenn das System sie beenden muss, um mehr Arbeitsspeicher freizugeben (z. B. um eine große Seite in einem Webbrowser anzuzeigen), können sie ohne großen Schaden getötet werden. Sie können diese Markierung setzen, wenn das Ausschalten Ihres Dienstes den Benutzer stört, z. B. wenn Ihr Dienst Hintergrundmusikwiedergabe durchführt, sodass der Benutzer bemerken würde, wenn seine Musik nicht mehr abgespielt wird.

Sie rufen startForeground in Ihrem Service onCreate Methode.

+0

danke dafür, Service arbeitet jetzt im Vordergrund und es wird nicht von Android getötet einige Tests zu töten, aber meine Aktivität wird neu gestartet, wie ich das verhindern? – xmarston

+0

Ich glaube nicht, dass Sie das verhindern können (nicht 100% sicher, obwohl). Sie können dies lösen, indem Sie Statusinformationen in den Service (oder in den internen Speicher) einfügen und wenn die Aktivität neu gestartet wird, können Sie die Daten aus dem Service abrufen, um die Aktivität zu füllen. Dies wird den Eindruck vermitteln, dass die Aktivität niemals zerstört wurde. – curob

+0

Denken Sie, SharedPreferences könnte eine gute Möglichkeit sein, den Status des Dienstes zu speichern? – xmarston

Verwandte Themen