Java Reference
In-Depth Information
169 Anwendung mit einem gebundenen
Service
Das Konzept eines gebundenen Service ist ä u ß erst mächtig. Ein gebundener Service stellt
nämlich die Android-Version von RMI (Remote Method Invocation) dar, wobei in diesem Fall
die Aufrufe nicht wirklich von einem anderen Rechner kommen (also nicht wirklich Remote
sind), aber von einer anderen Anwendung bzw. von einem anderen Prozess und damit
einem anderen Adressraum. In einer Service-Klasse kann sowohl ein ungebundener als
auch ein gebundener Service realisiert werden. Wir betrachten die Dienstarten hier getrennt
und konzentrieren uns nach der Besprechung eines ungebundenen Service im Folgenden
ausschließlich auf einen gebundenen Service.
1 6 .9 1 AIDL-Schnittstelle
Wie bei RMI benötigt man für einen gebundenen Service zunächst einmal eine Schnitt-
stelle. In RMI defi niert man diese als Schnittstelle in Java. In Android muss man diese
Schnittstelle in AIDL (Android Interface Defi nition Language) in einer Datei mit der Endung
.aidl angeben. Es wird höchste Zeit, dass wir unser Zählerbeispiel wieder aufgreifen. In
Listing 16.8 fi ndet sich eine Counter-Schnittstelle in AIDL.
Listing 16.8 AIDL-Schnittstelle Counter
package javacomp.android.boundservice;
interface Counter
{
int increment();
int reset();
}
Bis jetzt ist der Unterschied zu Java kaum zu erkennen. Diese AIDL-Schnittstelle ist auch
eine gültige Java-Schnittstelle. Wenn man allerdings das Schlüsselwort public noch vor die
Schnittstelle oder die Methoden schreibt, was in Java geht, dann erhält man einen Fehler in
AIDL. Die Entwicklungsumgebung für Android erzeugt aus der AIDL-Datei automatisch
Code in Form einer Klasse mit demselben Namen und in demselben Package wie die AIDL-
Schnittstelle, in unserem Fall also die Klasse Counter in dem in Listing 16.8 angegebenen
Package.
1 6 .9 .2 Implementierung einer AIDL-Schnittstelle
Zur Implementierung einer AIDL-Schnittstelle muss man eine Klasse aus der inneren
Klasse Stub der automatisch erzeugten Klasse ableiten (in unserem Fall also aus Counter.
Stub). Ähnlich wie bei RMI müssen die Methoden alle mit „throws RemoteException“ verse-
hen sein, wobei die Klasse RemoteException eine andere Klasse ist als die Klasse gleichen
 
Search WWH ::




Custom Search