Java Reference
In-Depth Information
In Listing 16.7 ist zu erkennen, dass zum Starten und zum Anhalten eines Dienstes jeweils
ein Intent-Objekt erzeugt wird (in diesem Fall handelt es sich um einen expliziten Intent)
und dieses als Argument den Methoden startService bzw. stopService übergeben wird. Der
Aufruf von startService bewirkt die Erzeugung eines MyUnboundService-Objekts sowie die
Anwendung der Methoden onCreate und onStartCommand auf diesem neuen Objekt. Alle
Methoden (sowohl der Activity- als auch der Service-Klasse) werden vom Main-Thread des
Anwendungsprozesses ausgeführt. Wie schon zuvor erwähnt wurde, ist dieser Thread ver-
gleichbar mit dem Event-Dispatching-Thread von Swing. Wie bei Swing gilt, dass dieser
Thread immer schnell auf Eingaben reagieren können soll. Somit sollten alle Methoden, die
von diesem Thread ausgeführt werden, nur eine kurze Ausführungszeit benötigen. Wenn
doch eine Aktion mit längerer Ausführungszeit durchgeführt werden muss, dann sollte
diese in einen Thread ausgelagert werden. Dies wird in der Methode onStartCommand
durch Erzeugung und Starten eines Threads angedeutet.
Wenn der Start-Button geklickt wird, wird ein neues MyUnboundService-Objekt erzeugt
und auf dieses die Methoden onCreate und onStartCommand angewendet, wodurch ein
neuer Thread erzeugt wird. Wenn der Start-Button dann ö er gedruckt wird, wird jedes Mal
nur noch die Methode onStartCommand auf das schon vorhandene Service-Objekt ange-
wendet. Wenn der Stopp-Button gedrückt wird, wird die Methode onDestroy auf dem Service-
Objekt aufgerufen und das Service-Objekt steht für die Abfallsammlung (Garbage Collec-
tion) bereit. Wenn anschließend wieder auf Start geklickt wird, wird ein neues Service-Objekt
erzeugt und auf dieses dann wieder onCreate und onStartCommand angewendet. Ganz
wichtig ist dies: Wie man an der Ausgabe erkennen kann, bewirkt das Beenden eines Diens-
tes nicht, dass alle von ihm gestarteten Threads automatisch beendet werden. Wenn man
also den Stopp-Button relativ schnell nach dem Start-Button drückt, sieht man, dass der
Thread weiterläu , auch wenn onDestroy ausgeführt wurde. Es liegt also in der Verantwor-
tung der Anwendungsentwicklerin, dass eventuell noch laufende Threads bei onDestroy
beendet werden, falls dies so sein soll. Im Beispielprogramm wurde absichtlich darauf ver-
zichtet, um den soeben geschilderten Eff ekt demonstrieren zu können.
Zum Abschluss der Besprechung dieser Beispielanwendung noch eine Bemerkung zum
Rückgabewert der Methode onStartCommand in Listing 16.6: Der Rückgabewert spielt
dann eine Rolle, wenn Android sich entschließt, den Prozess, in dem der Service läu , abzu-
schießen. Wenn Android später wieder freie Ressourcen hat, wird bei einer Rückgabe von
START_STICKY automatisch ein neuer Prozess erzeugt, ein Service-Objekt erzeugt und dar-
auf onCreate und onStartCommand mit einem Null-Intent aufgerufen. Das Intent-Objekt,
welches den Aufruf von onStartCommand veranlasst hat, ist das erste Argument dieser
Methode. Wie im Beispiel mit den zwei Activities in Abschnitt 16.5 kann man auch diesem
Intent zusätzliche Daten übergeben, die in onStartCommand ausgewertet werden. Die bei-
den weiteren Parameter fl ags und startId von onStartCommand werden hier nicht erläutert.
Es sei auf die Android-Dokumentation verwiesen.
 
Search WWH ::




Custom Search