Android - Wie ist es möglich, dass ein Dienst ausgeführt wird, nachdem die Aktivität heruntergefahren wurde?

8

Ich bin etwas verwirrt darüber, wie Dienste funktionieren, vor allem diese zwei Dinge:

Von Ссылка :

  

Ein Dienst wird "gestartet", wenn eine Anwendungskomponente (z. B. eine Aktivität) ihn durch Aufruf von startService () startet. Einmal gestartet, kann ein Dienst unbegrenzt im Hintergrund ausgeführt werden, selbst wenn die Komponente, die ihn gestartet hat, zerstört wird.

und:

  

Vorsicht: Ein Dienst wird im Hauptthread des Hostingprozesses ausgeführt. Der Dienst erstellt keinen eigenen Thread und wird nicht in einem separaten Prozess ausgeführt (sofern Sie nichts anderes angeben).

Meine Fragen:

  1. Wie ist es möglich, dass ein Dienst, der von startService () gestartet wurde, überlebt, wenn der Haupt-Aktivitäts-Thread beendet wird? Oder nur diese Dienste überleben die Hauptaktivitätsabschaltung, die sich in einem separaten Thread befinden?

  2. Wie kann ich einen Dienst in einem separaten Thread starten? Das Entwickler-Dokument unter Ссылка zeigt nur ein Beispiel, wie ein Thread erzeugt wird, wenn der Service verfügbar ist erstellt ... nicht wie der Dienst selbst in einem neuen Thread erzeugt wird ...
    EDIT: Ist android:process= in manifest.xml zum Starten in einem separaten Thread verwendet? (Wenn es in einem neuen Prozess gestartet wird, muss es in einem separaten Thread sein.)

sydd 02.12.2011, 17:27
quelle

2 Antworten

6

Um Sie zu zitieren:

  

Vorsicht: Ein Dienst wird im Hauptthread des Hostingprozesses ausgeführt. Der Dienst erstellt keinen eigenen Thread und wird nicht in einem separaten Prozess ausgeführt (sofern Sie nichts anderes angeben).

Wenn die Hauptaktivität heruntergefahren wird, bedeutet dies nicht unbedingt, dass der Hosting-Prozess beendet wird. Laut der Dokumentation läuft der Dienst weiter, weil der Prozess am Leben ist!

Überprüfen Sie das

  

Das Android-System versucht, den Prozess, der einen Dienst hostet, so lange beizubehalten, wie der Dienst gestartet wurde oder Clients an ihn gebunden sind. Wenn der Arbeitsspeicher knapp wird und vorhandene Prozesse beendet werden müssen, ist die Priorität eines Prozesses, der den Dienst hostet, der höhere Wert.

Nur wenn Ressourcen knapp sind und Prozesse umgangen werden müssen, wird Ihr Prozess beendet. Sonst. der Prozess lebt weiter, also würde dein Dienst.

    
Kiran Kuppa 02.12.2011, 17:40
quelle
4
  1. Ein gestarteter Dienst kann das Herunterfahren einer Aktivität überleben, die ihn genau so startet, wie eine Aktivität das Herunterfahren einer anderen Aktivität überleben kann, die sie mit startActivity() startet. Aktivitäten und Services sind nur zwei separate Komponenten Ihres Bewerbungsprozesses. Einmal gestartet, existiert jeder unabhängig von dem anderen. (Die Dinge sind bei gebundenen Diensten etwas anders - das System wird einen gebundenen Dienst herunterfahren, wenn nichts mehr daran gebunden ist.)

  2. Sie können einen Dienst nicht in einem separaten Thread starten, genauso wenig wie Sie eine Aktivität in einem nicht ereignisgesteuerten Thread starten können. Sie können das System nur bitten, den Dienst zu starten (über startService() oder bindToService() ). Das System startet den Dienst immer mit dem Ereignisthread.

Ted Hopp 02.12.2011 17:32
quelle