2010-07-19 4 views
5

Ich habe einen Hintergrunddienst, der permanent ausgeführt werden muss. Der Dienst muss nur mit meiner Aktivität interagieren.Lokaler Service oder Remote-Service?

  1. Wie kann ich die Aktivität fortsetzen, wenn der Dienst noch läuft? Gibt es eine bessere Möglichkeit als eine statische Variable in der Serviceklasse?

  2. Ist es von Vorteil, einen Remote-Dienst in einem separaten Prozess zu verwenden (um die Lebensdauer zu verlängern), sodass der Dienst noch aktiv ist, wenn der Aktivitätsprozess beendet wird?

+0

'adb bugreport' sagte mir, dass mein Dienst zu sehr abgestürzt ist und – OneWorld

Antwort

7

Ich habe einen Hintergrunddienst die laufen permanent muss.

This is not possible. Der Benutzer oder Android wird Ihren Dienst irgendwann beenden. Bitte überdenken Sie Ihre Architektur.

Wie kann ich die Aktivität fortsetzen, wenn der Dienst noch läuft?

Im Allgemeinen nicht.

Gibt es eine bessere Möglichkeit als eine statische Variable in der Serviceklasse?

Das funktioniert nicht, wenn der Benutzer oder Android Ihren Dienst beendet.

Ist es von Vorteil, einen Remote- Service in einem separaten Prozess zu verwenden ( Lebensdauer Zeit verlängern), so dass, wenn die Aktivität Prozess der Service noch am Leben getötet wird ist?

Ein Remotedienst hat nichts damit zu tun, ob der Dienst ausgeführt wird, nachdem Aktivitäten zerstört wurden. Wenn Sie startService() rufen, wird der Dienst ausgeführt wird, unabhängig von irgendwelchen Aktivitäten, bis:

  • Sie stopService() aus einer Tätigkeit nennen
  • der Dienst ruft stopSelf()
  • Android den Dienst beendet
  • der Benutzer beendet die Service über die Einstellungen Anwendung
  • der Benutzer beendet den Dienst über einen "Task Killer" (Android 2.1 und früher, mindestens)
+0

zerstört wurde und was will der Benutzer die Aktivität auf Wiedererscheinen zu informieren, wenn der Hintergrund-Service noch seine Arbeit macht? – Sney

+0

@Snej: Ich verstehe deine Frage nicht, sorry. – CommonsWare

+0

Sorry, mein letzter Kommentar war ein bisschen durcheinander, bis ich es merkte. Die Frage war, wie ermittelt werden kann, wenn der Benutzer die Anwendung neu startet, unabhängig davon, ob der Hintergrunddienst noch ausgeführt wird oder bereits ausgeführt wurde. Durch die Antwort von Macarse kann eine Absicht in den Dienst geworfen werden. Aber wie kann ich herausfinden, ob der Dienst neu gestartet wurde oder noch läuft? – Sney

3

Warum möchten Sie wissen, ob der Dienst ausgeführt wird? Wenn Sie etwas davon brauchen, werfen Sie einfach eine Intent und wenn es nicht läuft, wird es mit der Absicht beginnen.

Im Zusammenhang mit der zweiten Frage:

Ihr Dienst wird nicht „sterben“, wenn Sie Ihre Aktivität wird geschlossen.

+1

Ich möchte es wissen, weil die Anwendung GPS-Daten protokolliert und es ist wichtig, dauerhaft zu protokollieren. Daher möchte ich den Benutzer über die Aktivität informieren, wenn er aufgrund einer Ausnahme oder eines getöteten Dienstes die Protokollierung beendet hat. – Sney

+0

Ich habe die gleiche Sorge wie Snej. – gregm

+1

@Sney: Dies ist ein Hack, aber Sie können versuchen, 'Broadcasts' aus dem Dienst zu senden, damit jeder weiß, dass Sie noch am Leben sind. – Macarse

3

Starten Sie den Service unter . Es wird die Zeitspanne des Dienstes erhöhen.