c't 15/2019
S. 184
Know-how
Bound Services in Android
Aufmacherbild
Bild: Albert Hulm

Geborgtes Können

Fähigkeiten an andere Apps verleihen mit Androids Bound Services

Android schottet Apps schön voneinander ab. Das führt allerdings zu viel dupliziertem Code, wenn mehrere Apps die gleichen Funktionen nutzen sollen. Mit einem Bound Service programmiert man die Funktion stattdessen nur einmal und stellt sie anderen Apps zur Verfügung.

Kurz bevor ich den Job bei der c’t antrat, habe ich mir eine privat gehostete Cloud namens „Pinyto“ überlegt, die ihre Datenbank mit RSA-Schlüsseln sauber vor unbefugten Zugriffen schützt. Ich schreibe immer mal wieder am Wochenende ein bisschen weiter an Pinyto. Beim Code für RSA & Co. kommen auch in der nicht so geschwätzigen Java-Alternative Kotlin einige Zeilen zusammen. Da verschiedene Android-Apps auf die Datenbank zugreifen sollten, wollte ich den Code nicht in jeder App duplizieren. Stattdessen sollte eine Connect-App die Authentifizierung übernehmen und alle anderen Apps lesen und schreiben die Datenbank über diesen Mittelsmann.

Eine Aufgabe wie die Kommunikation mit einem Datenbankserver braucht kein grafisches Interface und findet auch unabhängig davon statt, welche Activity Android gerade anzeigt. Für solche Aufgaben bringt Android die Service-Klasse mit. Ähnlich wie Activities hat sie einen Lebenszyklus mit onCreate() und onDestroy(), nur eben unabhängig vom Geschehen auf dem Display. Viele Services dienen nur der eigenen App als Hintergrunddienste. Apps starten sie mit startService(). Ihr Vorteil: Sie laufen weiter, wenn die Activity neu gestartet wird, beispielsweise weil der Anwender sein Gerät dreht. Gestartete Services verwaltet die App selbst und beendet sie, wenn sie sie nicht mehr braucht.