Android 10 (API-Level 29) und höher schränken ein, wann Apps Aktivitäten starten können, wenn sie im Hintergrund ausgeführt werden. Diese Einschränkungen tragen dazu bei, Unterbrechungen für den Nutzer zu minimieren und ihm mehr Kontrolle darüber zu geben, was auf seinem Bildschirm angezeigt wird.
In diesem Leitfaden werden Benachrichtigungen als Alternative zum Starten von Aktivitäten im Hintergrund vorgestellt. Außerdem sind die konkreten Fälle aufgeführt, in denen die Einschränkung nicht gilt.
Stattdessen Benachrichtigungen anzeigen
In beinahe allen Fällen müssen Apps im Hintergrund zeitkritische Benachrichtigungen anzeigen, um dem Nutzer dringende Informationen zu liefern, anstatt eine Aktivität direkt zu starten. Zu diesen Benachrichtigungen gehören die Verarbeitung eines eingehenden Telefonanrufs oder einer aktiven Wecker.
Dieses benachrichtigungsbasierte Benachrichtigungs- und Erinnerungssystem bietet Nutzern mehrere Vorteile:
- Wenn der Nutzer das Gerät verwendet, wird eine Vorabbenachrichtigung angezeigt, mit der er antworten kann. Der Nutzer behält seinen aktuellen Kontext und hat Kontrolle über den Inhalt, den er auf dem Bildschirm sieht.
- Zeitkritische Benachrichtigungen berücksichtigen die Bitte nicht stören-Regeln des Nutzers. So können Nutzer beispielsweise nur Anrufe von bestimmten Kontakten oder von wiederholten Anrufen zulassen, wenn „Bitte nicht stören“ aktiviert ist.
- Wenn der Bildschirm des Geräts ausgeschaltet ist, wird der Full-Screen Intent sofort gestartet.
- Auf dem Bildschirm Einstellungen des Geräts kann der Nutzer sehen, von welchen Apps kürzlich Benachrichtigungen gesendet wurden, einschließlich bestimmter Benachrichtigungskanäle. Über diesen Bildschirm kann der Nutzer seine Benachrichtigungseinstellungen festlegen.
Wann Apps Aktivitäten starten können
Apps, die unter Android 10 oder höher ausgeführt werden, können Aktivitäten starten, wenn eine oder mehrere der folgenden Bedingungen erfüllt sind:
- Die App hat ein sichtbares Fenster, z. B. eine Aktivität im Vordergrund.
- Die App hat eine Aktivität im Back-Stack der Aufgabe im Vordergrund.
Die App enthält im Back-Stack einer vorhandenen Aufgabe auf dem Bildschirm „Zuletzt“ eine Aktivität.
Die App hat eine erst vor Kurzem gestartete Aktivität.
Die App
finish()
für eine Aktivität wurde vor Kurzem ausgeführt. Dies gilt nur, wenn die App beim Aufruf vonfinish()
entweder eine Aktivität im Vordergrund oder eine Aktivität im Back-Stack der Aufgabe im Vordergrund hatte.Die App hat einen der folgenden Dienste, der an das System gebunden ist. Diese Dienste müssen möglicherweise eine UI starten.
AccessibilityService
AutofillService
CallRedirectionService
HostApduService
InCallService
TileService
(nicht zutreffend unter Android 14 (API-Level 34) und höher)VoiceInteractionService
VrListenerService
.
Die Anwendung hat einen Dienst, der an eine andere, sichtbare Anwendung gebunden ist. Die an den Dienst gebundene Anwendung muss sichtbar bleiben, damit die Anwendung im Hintergrund Aktivitäten erfolgreich starten kann.
Die App erhält eine Benachrichtigung
PendingIntent
vom System. Bei ausstehenden Intents für Dienste und Broadcast-Empfänger kann die App für einige Sekunden Aktivitäten starten, nachdem der ausstehende Intent gesendet wurde.Die Anwendung empfängt ein
PendingIntent
, das von einer anderen, sichtbaren Anwendung gesendet wird.Die App empfängt einen System-Broadcast, bei dem die App voraussichtlich eine UI starten wird. Beispiele hierfür sind
ACTION_NEW_OUTGOING_CALL
undSECRET_CODE_ACTION
. Die App kann nach dem Senden der Nachricht noch einige Sekunden lang Aktivitäten starten.Die App ist über die
CompanionDeviceManager
API mit einem Companion-Hardwaregerät verknüpft. Mit dieser API kann die App Aktivitäten als Reaktion auf Aktionen starten, die der Nutzer auf einem gekoppelten Gerät ausführt.Die App ist ein Device Policy Controller, der im Modus „Geräteeigentümer“ ausgeführt wird. Beispielanwendungsfälle sind unter anderem vollständig verwaltete Unternehmensgeräte sowie dedizierte Geräte wie digitale Beschilderung und Kioske.
Der Nutzer hat der App die Berechtigung
SYSTEM_ALERT_WINDOW
gewährt.
Beim Starten von Aktivitäten von PendingIntents ist eine Zustimmung erforderlich
Um versehentliche Aktivitätsstarts auf Grundlage der aufgeführten Bedingungen zu vermeiden, gibt es ab Android 14 explizite APIs, mit denen du App-Berechtigungen für Aktivitätsstarts aktivieren oder deaktivieren kannst.
Apps, die auf Android 15 oder höher ausgerichtet sind, gewähren der von ihnen erstellten PendingIntents
standardmäßig nicht mehr implizit Berechtigungen zum Starten von Hintergrundaktivitäten.
Eine explizite Zustimmung ist erforderlich. Dies sind die Optionen, je nachdem, ob die Anwendung PendingIntents
sendet oder erstellt.
Vom Absender des PendingIntent
Apps, die auf Android 14 oder höher ausgerichtet sind und ein PendingIntent
starten möchten, müssen
- die aufgeführten Bedingungen erfüllen und
- dem Aktivieren der Aktivierung von Hintergrundaktivitäten auf der Grundlage dieser Ausnahmen zustimmen
Diese Aktivierung sollte nur dann erfolgen, wenn der App-Entwickler weiß, dass die App gerade eine Aktivität starten wird.
Zum Aktivieren muss die App ein ActivityOptions
-Bundle mit setPendingIntentBackgroundActivityStartMode(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)
an PendingIntent.send()
oder ähnliche Methoden übergeben.
Vom Ersteller des PendingIntent
Apps, die auf Android 15 oder höher ausgerichtet sind und eine PendingIntent
erstellen, müssen jetzt explizit das Starten von Hintergrundaktivitäten zulassen, wenn diese PendingIntents
unter den aufgeführten Bedingungen gestartet werden können.
In den meisten Fällen sollte die App, die den PendingIntent
startet, diejenige sein, die aktiviert werden muss.
Wenn die erstellende Anwendung jedoch diese Berechtigungen gewähren muss:
PendingIntent
kann jederzeit gestartet werden, wenn die erstellende App sichtbar ist.PendingIntent
kann jederzeit gestartet werden, wenn die erstellende Anwendung spezielle Berechtigungen hat.
Zum Aktivieren muss die App ein ActivityOptions
-Bundle mit setPendingIntentCreatorBackgroundActivityStartMode
(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)
an PendingIntent.getActivity()
oder ähnliche Methoden übergeben.
Weitere Informationen finden Sie in der entsprechenden Referenzdokumentation:
ActivityOptions.setPendingIntentBackgroundActivityStartMode
ActivityOptions.setPendingIntentCreatorBackgroundActivityStartMode