2016-07-31 10 views
0

In meiner App verwende ich einen Hintergrund-Service, um einige Hintergrunddaten abrufen. Ich starte den DienstAktivität und Binder-Service

bindService(intent, mConnection, Context.BIND_AUTO_CREATE); 

mConnection verwendet, ist Instanz von ServiceConnection.

Im Dienst ich holen einige Daten und überprüfen Sie es, und wenn der Scheck besteht Ich einen Ton.So, wenn dies passiert Benutzer kann eine STOP-Taste auf dem Aktivitätsbildschirm drücken.Dies würde aufrufen lösen (mConnection), die zerstören würde der Dienst, bei dem ich den Ton stoppe. Meine Abfrage ist, dass während der Dienst im Hintergrund ausgeführt wird, und unterdessen Android die Aktivität beendet, dann wie Benutzer den Dienst stoppen kann. Ich brauche mConnection, um den Dienst zu lösen, und ich kann nicht mConnection in Bundle in onSaveInstanceState speichern.

+0

Wäre es nicht besser, einen IntentService und einen Broadcast-Empfänger (startService-Aufruf) als einen gebundenen Dienst zu verwenden, da es sich nur um eine bestimmte Hintergrundaufgabe handelt und nicht um viele verschiedene Aufgaben? –

+0

Hallo Mark, ich möchte die Aktivitätsoberfläche pflegen, so dass der Benutzer, wenn er den Hintergrunddienst dazwischen anhalten möchte, dies mit der STOP-Taste tun kann. IntentService wird nach dem Start nicht mehr vom Benutzer kontrolliert. – Mandroid

+0

Warum nicht einen Executor/Threadpool/Runnable/in einem Dienst verwenden, so können Sie immer noch die Kontrolle haben, indem Sie einen Befehl an shutdownNow() auf dem Executor senden - so ist der Service nicht an den Aktivitätslebenszyklus gebunden und Sie können ihn pflegen Kontrolle über den ausführenden Thread im Dienst. –

Antwort

1

Wenn Sie den Dienst mit der Methode bindService (...) starten, wird der Dienst vom System beendet, wenn die Aktivität vom System beendet wird. Ihr Lebenszyklus ist an die Aktivität gebunden. BTW das System wird den Prozess und nicht nur die Aktivität beenden. Dies ist anders, wenn Sie Dienste mit startService() und START_STICKY starten.

In Ihrem Fall müssen Sie sich keine Sorgen machen. Solange die Aktivität aufhört, wird auch Ihr Service eingestellt.

+0

Mein Ziel ist, dass die Aktivität auch dann funktioniert, wenn die übergeordnete Aktivität von Android beendet wird. Wenn der Benutzer die Aktivität erneut besucht, wird sie im gleichen UI-Status wie zuvor wiederhergestellt. Ist es machbar? – Mandroid