Einschränkungen beim Starten von Aktivitäten im Hintergrund

Unter Android 10 (API-Level 29) und höher gibt es Einschränkungen, wann Apps Aktivitäten starten können, wenn die App in Hintergrund ausgeführt wird. Diese Einschränkungen sollen Unterbrechungen für den Nutzer minimieren und ihm mehr Kontrolle darüber geben, was auf seinem Bildschirm angezeigt wird.

In dieser Anleitung werden Benachrichtigungen als Alternative zum Starten von Aktivitäten im Hintergrund vorgestellt. Außerdem werden die spezifischen Fälle aufgeführt, in denen die Einschränkung nicht gilt.

Stattdessen Benachrichtigungen anzeigen

In fast allen Fällen müssen Apps im Hintergrund zeitkritische Benachrichtigungen anzeigen, um dem Nutzer dringende Informationen zu geben, anstatt direkt eine Aktivität zu starten. Zu solchen Benachrichtigungen gehören beispielsweise der Umgang mit einem eingehenden Anruf oder einem aktiven Wecker.

Dieses benachrichtigungsbasierte Benachrichtigungs- und Erinnerungssystem bietet Nutzern mehrere Vorteile:

  • Wenn der Nutzer das Gerät verwendet, sieht er eine wichtige Benachrichtigung, auf die er reagieren kann. Der Nutzer behält den aktuellen Kontext bei und hat die Kontrolle über die Inhalte, die auf dem Bildschirm angezeigt werden.
  • Zeitkritische Benachrichtigungen berücksichtigen die Regeln für „Bitte nicht stören“ des Nutzers. Nutzer können beispielsweise zulassen, dass Anrufe nur von bestimmten Kontakten oder von wiederholten Anrufern eingehen, wenn „Bitte nicht stören“ aktiviert ist.
  • Wenn der Bildschirm des Geräts ausgeschaltet ist, wird die Full-Screen Intent sofort gestartet.
  • Auf dem Bildschirm Einstellungen des Geräts kann der Nutzer sehen, welche Apps in letzter Zeit Benachrichtigungen gesendet haben, einschließlich Benachrichtigungen von bestimmten Benachrichtigungskanälen. Auf diesem Bildschirm kann der Nutzer seine Benachrichtigungseinstellungen verwalten.

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 hat eine Aktivität im Back-Stack einer vorhandenen Aufgabe auf dem Bildschirm „Letzte Apps“.

  • Die App hat eine Aktivität, die erst vor Kurzem gestartet wurde.

  • Die App hat vor Kurzem finish() für eine Aktivität aufgerufen. Dies gilt nur, wenn die App entweder eine Aktivität im Vordergrund oder eine Aktivität im Back-Stack der Aufgabe im Vordergrund hatte, als finish() aufgerufen wurde.

  • Die App hat einen der folgenden Dienste, der vom System gebunden ist. Für diese Dienste muss möglicherweise eine UI gestartet werden.

  • Die App hat einen Dienst, der von einer anderen sichtbaren App gebunden ist. Die App, die an den Dienst gebunden ist, muss sichtbar bleiben, damit die App im Hintergrund Aktivitäten starten kann.

  • Die App erhält eine Benachrichtigung PendingIntent vom System. Bei ausstehenden Intents für Dienste und Übertragungsempfänger kann die App einige Sekunden nach dem Senden des ausstehenden Intents Aktivitäten starten.

  • Die App erhält eine PendingIntent, die von einer anderen sichtbaren App gesendet wird.

  • Die App erhält eine Systemübertragung, bei der die App eine UI starten soll. Beispiele sind ACTION_NEW_OUTGOING_CALL und SECRET_CODE_ACTION. Die App kann einige Sekunden nach dem Senden der Übertragung Aktivitäten starten.

  • Die App ist über die CompanionDeviceManager API mit einem Begleitgerät verbunden. 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. Beispiele für Anwendungsfälle sind vollständig verwaltete Unternehmensgeräte sowie spezielle Geräte wie digitale Beschilderung und Kiosks.

  • Der Nutzer hat der App die SYSTEM_ALERT_WINDOW Berechtigung gewährt.

Einwilligung erforderlich, wenn Aktivitäten über PendingIntents gestartet werden

Um zu vermeiden, dass Aktivitäten versehentlich auf Grundlage der aufgeführten Bedingungen gestartet werden, gibt es ab Android 14 explizite APIs, mit denen Sie einwilligen oder ablehnen können, einer App Berechtigungen für Aktivitätsstarts zu gewähren.

Bei Apps, die auf Android 15 oder höher ausgerichtet sind, werden standardmäßig keine Berechtigungen für den Start von Hintergrundaktivitäten mehr implizit an PendingIntents gewährt, die sie erstellen. Eine ausdrückliche Einwilligung ist erforderlich. Je nachdem, ob die App PendingIntents sendet oder erstellt, gibt es folgende Optionen:

Tabelle mit ausstehenden Intents
Abbildung 1: Entscheidungsablauf für den Start von Hintergrundaktivitäten.

Durch den Absender des PendingIntent

Apps, die auf Android 14 oder höher ausgerichtet sind und eine PendingIntent starten möchten, müssen

  • die aufgeführten Bedingungen erfüllen
  • einwilligen, dass der Start von Hintergrundaktivitäten auf Grundlage dieser Ausnahmen zulässig ist.

Diese Einwilligung sollte nur erfolgen, wenn der App-Entwickler weiß, dass die App eine Aktivität starten wird.

Um einzuwilligen, sollte die App ein ActivityOptions Bundle mit setPendingIntentBackgroundActivityStartMode(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) an die PendingIntent.send() oder ähnliche Methoden übergeben.

Durch den Ersteller des PendingIntent

Apps, die auf Android 15 oder höher ausgerichtet sind und eine PendingIntent erstellen, müssen jetzt explizit einwilligen, dass der Start von Hintergrundaktivitäten zulässig ist, wenn diese PendingIntents unter den aufgeführten Bedingungen gestartet werden können sollen.

In den meisten Fällen sollte die App, die die PendingIntent startet, die Einwilligung geben. Wenn die erstellende App diese Berechtigungen gewähren muss, gilt Folgendes:

  • Die PendingIntent kann jederzeit gestartet werden, wenn die erstellende App sichtbar ist.
  • Die PendingIntent kann jederzeit gestartet werden, wenn die erstellende App spezielle Berechtigungen hat.

Um einzuwilligen, sollte die App ein ActivityOptions Bundle mit setPendingIntentCreatorBackgroundActivityStartMode (ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) an die PendingIntent.getActivity() oder ähnliche Methoden übergeben.

Weitere Informationen finden Sie in der entsprechenden Referenzdokumentation:

Strikter Modus

Ab Android 16 kann der App-Entwickler den strikten Modus aktivieren, um benachrichtigt zu werden, wenn ein Aktivitätsstart blockiert wird (oder blockiert werden könnte, wenn das Ziel-SDK der App erhöht wird).

Beispielcode zum Aktivieren des strikten Modus in der Methode Application.onCreate() Ihrer Anwendung, Aktivität oder einer anderen Anwendungskomponente:

 override fun onCreate(savedInstanceState: Bundle?) {
     super.onCreate(savedInstanceState)
     StrictMode.setVmPolicy(
         StrictMode.VmPolicy.Builder()
         .detectBlockedBackgroundActivityLaunch()
         .penaltyLog()
         .build());
     )
 }

Weitere Informationen finden Sie in der Dokumentation zum strikten Modus.