Java Reference
In-Depth Information
wird beim automatischen Neubinden wieder aufgerufen. Diese Robustheit ist ein besonde-
res Qualitätsmerkmal von Android: Ein zwangsweises Beenden eines Prozesses wird wie-
der aufgefangen. In unserem Fall ist natürlich der alte Zählerstand weg und die Zählung
beginnt wieder bei 0. Durch Abspeichern des Zählers auf nicht-fl üchtigem Speicher und
Wiedereinlesen des abgespeicherten Werts beim Erzeugen des Zähler-Objekts könnte man
dem aber entgegenwirken.
Die beiden Methoden onServiceConnected und onServiceDisconnected werden übrigens
vom Main-Thread des Prozesses ausgeführt. Da dieser Thread (als Einziger) auf die grafi -
sche Benutzeroberfl äche zugreifen darf, ergibt sich kein Problem, wenn man in der Methode
setCounter, die von diesen Methoden aufgerufen wird, die Anzeige auf der Oberfl äche ent-
sprechend ändert (vgl. zu dieser Problematik Abschnitt 16.9.6).
Wenn die Activity, die den Service gebunden hat, endet ohne zuvor unbindService aufgeru-
fen zu haben, wird eine Ausnahme von Android geworfen. Android erkennt diesen Fall also
und hält auf diese Weise den Entwickler zu einem sauberen Programmierstil an. Man sollte
sich also spätestens in der Activity-Methode onDestroy von allen noch gebundenen Diens-
ten abkoppeln.
1 6 .9 .5 Parameterübergabe durch Call-By-Value-Result
Parameter einer der primitiven Java-Datentypen wie int oder Parameter des Typs String
sind bei der Übergabe problemlos. Diese werden als Wert (Call-By-Value), d. h. in Form einer
Kopie, übergeben. Will man aber als Parameter ein Objekt seiner eigenen Klasse übergeben,
muss man dafür sorgen, dass dieses bei Bedarf auch zu einem anderen Prozess transpor-
tiert werden kann. Bei RMI muss man die Klassen solcher Objekte durch Implementierung
der leeren Schnittstelle Serializable serialisierbar machen. Dies ist bei Android ähnlich,
aber etwas aufwändiger. Man muss die Schnittstelle Parcelable implementieren, die aber
nicht leer ist. Man muss darin wirklich die Serialisierung seiner Objekte ausprogrammie-
ren. Als Beispiel nehmen wir an, dass unsere Counter-Schnittstelle eine zusätzliche Methode
change bekommen soll, in der ein Objekt einer Klasse übergeben wird, die zwei Werte des
Typs int enthält: einen, mit dem der Zähler zuerst multipliziert und einen, der anschließend
zum Zähler addiert wird. Aus Demonstrationsgründen soll die Methode change den neuen
Wert nicht als Rückgabewert zurückgeben, sondern in der Klasse Data befi ndet sich ein
weiteres Attribut für den Wert des Zählers am Ende der Methode change. Listing 16.12 zeigt
einen Ausschnitt der Klasse Data (weitere Methoden wie Konstruktoren, Getter- und Setter-
Methoden werden weggelassen).
Listing 16.12 Klasse Data
package javacomp.android.boundservice;
import android.os.Parcel;
import android.os.Parcelable;
public class Data implements Parcelable
{
private int factor;
private int addend;
private int result;
 
Search WWH ::




Custom Search