Java Reference
In-Depth Information
erzeugte Objekt (s. Listing 16.10). Wenn dagegen der Dienst in einem anderen Prozess läu ,
dann erhält man nur einen Stub, der dafür sorgt, dass beim Aufruf der Methoden increment
und reset die Prozessgrenzen überwunden und die entsprechende Methode auf dem Objekt,
das sich in einem anderen Prozess befi ndet, aufgerufen wird. In seiner Anwendung muss
man aber die beiden F lle nicht unterscheiden.
Listing 16.11 Implementierung der Schnittstelle ServiceConnection durch die Klasse
MyServiceConnection
package javacomp.android.boundservice;
import android.content.ComponentName;
import android.content.ServiceConnection;
import android.os.IBinder;
public class MyServiceConnection implements ServiceConnection
{
private ServiceActivity activity;
public MyServiceConnection(ServiceActivity activity)
{
this.activity = activity;
}
public void onServiceConnected(ComponentName name,
IBinder binder)
{
Counter c = Counter.Stub.asInterface(binder);
activity.setCounter(c);
}
public void onServiceDisconnected(ComponentName name)
{
activity.setCounter(null);
}
}
Wenn man den Dienst wieder abmelden möchte, ru man die Methode unbindService auf.
Hierzu muss man das ServiceConnection-Objekt, das man bei bindService übergeben hat,
wieder angeben:
unbindService(serviceConn);
Als Reaktion auf unbindService wird allerdings die Methode onServiceDisconnected nicht
aufgerufen. Die Methode onServiceDisconnected wird nur aufgerufen, wenn der Dienst
außerplanmäßig nicht mehr zur Verfügung steht. Dies ist zum Beispiel dann der Fall, wenn
er in einem eigenen Prozess läu und Android diesen Prozess wegen Ressourcenknappheit
beendet hat, was man über den Debugger durch Abschießen des Prozesses auch simulieren
kann. Android erzeugt den Prozess neu, falls beim Beenden Bindungen vorhanden waren.
Alle diese Bindungen werden nach dem Neustart des Prozesses von Android wiederherge-
stellt. Wenn man also den Prozess über seinen Debugger beendet, zeigt die Activity in ihrer
Oberfl äche an, dass der Dienst nicht mehr zur Verfügung steht, da onServiceDisconnected
aufgerufen wurde. Kurze Zeit später steht der Dienst aber wieder bereit; die ServiceActivity
zeigt dies an, ohne dass man dazu irgendetwas tun muss. Die Methode onServiceConnected
 
Search WWH ::




Custom Search