swirl logo

About     Archive     Feed     Impressum

Android: Der IntentService im Detail

Hintergrund

Die Klasse IntentService ist eine besondere Ausprägung (Subtyp) von Service. Der Intent-Service dient als eine Art Wrapper um Aufgaben vom Main-Thread der Applikation in einer Queue auszulagern, welche mittels einem Worker-Thread sequentiell bearbeitet wird. Die vom Client mittels startService(intent) erfolgten Aufrufe werden in der Queue entsprechend deren Reihenfolge (FiFo) solange abgearbeitet, bis kein Intent mehr vorhanden ist. In diesem Fall beendet sich der Service automatisch.

Implementierung

Um einen IntentService verwenden zu können, muss ein individueller Subtyp erstellt werden und die Methode onHandleIntent(Intent) implementiert werden. Im Gegensatz zu einem "normalen" Service erfordert der IntentService keinerlei "Background-Handling"-Mechanismus, da dieser standardmäßig nicht im Main-Thread der Applikation ausgeführt wird.

Ein Intent-Service eignet sich somit vor allem dazu, um zyklische (vor allem langlaufende) Aufgaben on-Demand sequentiell gemäß deren initiierten Reihenfolge zu bearbeiten.

Folgend der Stub einer IntentService-Implementierung:

public class MyIntentService extends IntentService {

  public MyIntentService(String name) {
    super(name);
  }

  @Override
  public void onCreate() {
    // TODO Aufgabe erledigen, die bei Erstellung des Services erledigt werden sollen.
    // z.B. System-Service beziehen, Context Instanzvariable zuweisen
  }
  
  @Override
  protected void onHandleIntent(Intent intent) {
    // TODO Zeitaufwendige Implementierung hinzufügen, die bei jeder Intent-Bearbeitung erfolgen muss.
  }
}

Der IntentService muss zudem noch wie gewöhnlich im Manifest registriert werden:

<service android:name="de.example.MyIntentService" />

Im Gegensatz zu einer Service-Implementierung, bei der mittels Aufruf von stopSelf() oder stopService() das Beenden des Services nach erledigter Arbeit eingeleitet wird, beendet sich der IntentService automatisch, wenn alle Requests bearbeitet wurden. Ein expliziter Aufruf von stopSelf() ist deshalb in diesem Fall nicht notwendig.

Der IntentService ist gerade auch aufgrund der einfachen und schnellen Implementierung eine wirklich gelungene Ergänzung zu AsyncTask und Service.

Hire me!