Android: Vordergrunddienst startet nicht oder wird beendet
Aufnahme oder Navigation hört auf, sobald die App nicht sichtbar ist? Android verbietet seit Version 12 den Start solcher Dienste aus dem Hintergrund.
Aufwand:
ca. 20 Min.
Voraussetzung:
Zugriff auf die Android-Einstellungen, adb mit Logcat für die genaue Fehlermeldung
Gilt für:
Android 12 und neuer, Android 14 und neuer für die Pflicht zum Diensttyp
Das Symptom
Die Sportuhr-App zeichnet die Laufstrecke auf – bis der Bildschirm ausgeht. Der
Podcast bricht ab, sobald du in eine andere App wechselst. Der Sprachrekorder
liefert dreißig Sekunden Aufnahme und danach Stille. Gemeinsam ist allen Fällen:
Solange die App sichtbar ist, funktioniert sie tadellos. Sobald sie es nicht mehr
ist, hört sie auf zu arbeiten – oft ohne jede Meldung.
Die „Layer 8“-Wahrheit
Was hier fehlt, hat einen Namen: der Vordergrunddienst. Das ist der Mechanismus,
mit dem eine App weiterarbeiten darf, obwohl du sie nicht mehr siehst – erkennbar
an der dauerhaften Benachrichtigung, die dabei in der Leiste steht. Genau dieser
Mechanismus wurde in den letzten Android-Versionen systematisch eingezäunt, weil
er über Jahre der bequemste Weg war, unbemerkt im Hintergrund Akku und
Datenvolumen zu verbrauchen.
Seit Android 12 darf eine App einen solchen Dienst nicht mehr aus dem Hintergrund
heraus starten. Sie muss zu dem Zeitpunkt sichtbar sein oder einen der
dokumentierten Sonderfälle erfüllen – etwa weil du auf eine Benachrichtigung
getippt hast oder weil die Akkuoptimierung für sie abgeschaltet ist. Versucht sie
es trotzdem, verweigert das System den Start mit einer Ausnahme. Seit Android 14
kommt die zweite Hürde dazu: Die App muss vorher schriftlich erklären, wofür sie
den Dienst überhaupt braucht. Fehlt dieser Typ, fliegt sie beim Start ebenfalls
auf die Nase.
Das ist unbequem, aber es ist keine Willkür. Der Preis dafür ist nur, dass er
fast nie beim Verursacher landet: Auf dem Bildschirm steht keine Erklärung,
sondern eine Aufnahme, die einfach aufhört. Die Wahrheit steht im Systemprotokoll
– und die Reparatur meistens im nächsten App-Update, nicht in deinen
Einstellungen.
Die echte, verifizierte Lösung
1000 % faktenbasiert. Jeder Befehl ist real, jeder Pfad existiert. Schritt für Schritt:
1.
Die echte Fehlermeldung besorgen
Ohne den Namen der Ausnahme ist jede weitere Suche geraten. Mit aktiviertem USB-Debugging lässt sich das Systemprotokoll auslesen und nach den drei einschlägigen Meldungen durchsuchen. Steht dort ForegroundServiceStartNotAllowedException, ist der Startzeitpunkt schuld; steht dort MissingForegroundServiceTypeException oder SecurityException, fehlt der App eine Angabe im Manifest:
adb logcat -d | grep -i ForegroundService
2.
Den Dienst starten, solange die App sichtbar ist
Eine der dokumentierten Ausnahmen ist der Übergang aus einem für den Nutzer sichtbaren Zustand. Praktisch heißt das: Aufnahme, Navigation oder Tracking in der geöffneten App starten und erst danach den Bildschirm sperren oder die App wegwischen. Wer den Start über ein Widget, eine Benachrichtigung oder eine Kachel auslöst, nutzt ebenfalls eine dokumentierte Ausnahme – das Antippen eines Bedienelements gehört ausdrücklich dazu.
3.
Die Akkuoptimierung für diese eine App abschalten
Das Abschalten der Akkuoptimierung für eine App ist in der Android-Dokumentation ausdrücklich als Ausnahme von der Startsperre aufgeführt. Der Schalter sitzt in den Akku-Einstellungen der jeweiligen App; wie er heißt, unterscheidet sich zwischen den Herstellern erheblich – uneingeschränkt, nicht optimiert oder ohne Einschränkungen sind die üblichen Formulierungen. Das gezielt für eine App tun, nicht pauschal für alle.
4.
Die App aktualisieren und im Zweifel den Entwickler behelligen
Fehlt der Diensttyp oder die dazugehörige Berechtigung, hilft am Gerät nichts. Das ist ein Fehler im App-Paket, der nur durch eine neue Version verschwindet. Eine App, die seit Android 14 an dieser Stelle abstürzt, wurde schlicht nie angepasst.
5.
Für Entwickler: Typ und Berechtigung im Manifest deklarieren
Android 14 verlangt beides – die Berechtigung zum Diensttyp und das Attribut am Dienst selbst. Das folgende Muster stammt aus der Android-Dokumentation und zeigt es am Beispiel der Medienwiedergabe:
Kommen nur Benachrichtigungen zu spät, während die App ansonsten läuft, ist das ein anderes Problem: Dort legt die Akkuverwaltung eine ansonsten funktionierende App schlafen. Hier dagegen darf ein Dienst gar nicht erst starten und beendet sich mit einer Ausnahme. Die Fehlermeldung im Protokoll trennt die beiden Fälle sauber.
Häufige Fragen (FAQ)
?Warum bricht die Aufnahme ab, sobald ich die App verlasse?
Weil die App den dauerhaft laufenden Dienst zu spät starten wollte. Android dokumentiert das unmissverständlich: Apps, die Android 12 oder höher als Ziel angeben, können keinen Vordergrunddienst starten, während die App im Hintergrund läuft – von einigen ausdrücklich benannten Ausnahmen abgesehen. Passiert es trotzdem, wirft das System eine ForegroundServiceStartNotAllowedException, und die App steht ohne den Dienst da, der die Arbeit machen sollte. Für dich sieht das aus wie ein Absturz oder wie eine Aufnahme, die einfach aufhört.
?Was ist ein Diensttyp und warum stürzt die App ohne ihn ab?
Seit Android 14 muss jede App, die einen Vordergrunddienst benutzt, angeben, wofür: Medienwiedergabe, Standort, Kamera, Datenübertragung und so weiter. Fehlt diese Angabe im Manifest, löst das System beim Aufruf von startForeground() eine MissingForegroundServiceTypeException aus. Und fehlt die zum Typ gehörende Berechtigung, wirft es eine SecurityException. Diese Berechtigungen sind laut Dokumentation normale Berechtigungen, werden standardmäßig gewährt und lassen sich von Nutzern nicht entziehen – du kannst hier also nichts kaputtgemacht haben und auch nichts reparieren.
?Kann ich als Nutzer überhaupt etwas tun?
Ein wenig. Die Android-Dokumentation listet Ausnahmen auf, unter denen ein Vordergrunddienst auch aus dem Hintergrund starten darf – darunter der Fall, dass der Nutzer die Akkuoptimierung für die App abgeschaltet hat, und der Fall, dass die App gerade aus einem für dich sichtbaren Zustand kommt. Beides lässt sich beeinflussen. Alles andere – fehlender Diensttyp, fehlende Berechtigung – ist Sache des Entwicklers und wird nur durch ein App-Update behoben.
Belege
Diese Seite ist gegen die folgenden Primärquellen geprüft – Hersteller, Standard oder Gesetzestext. Wer es nicht glaubt, muss es nicht: Da steht, wo es nachzulesen ist.
adb sieht das Handy, darf aber nicht darauf zugreifen: Status unauthorized. Es fehlt die Bestätigung des RSA-Schlüssels direkt auf dem entsperrten Gerät.