Einschränkungen beim Starten von Aktivitäten im Hintergrund

Unter Android 10 (API-Level 29) und höher gelten Einschränkungen für das Starten von Aktivitäten durch Apps, die im Hintergrund ausgeführt werden. Diese Einschränkungen tragen dazu bei, Unterbrechungen für Nutzer zu minimieren und ihnen mehr Kontrolle darüber zu geben, was auf ihrem Bildschirm angezeigt wird.

In diesem Leitfaden werden Benachrichtigungen als Alternative zum Starten von Aktivitäten im Hintergrund vorgestellt. Außerdem werden die 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 zur Verfügung zu stellen, anstatt direkt eine Aktivität zu starten. Dazu gehören beispielsweise eingehende Anrufe oder ein aktiver Wecker.

Dieses benachrichtigungsbasierte Benachrichtigungs- und Erinnerungssystem bietet Nutzern mehrere Vorteile:

  • Wenn der Nutzer das Gerät verwendet, wird eine Push-Benachrichtigung angezeigt, über die er reagieren kann. Der Nutzer behält seinen aktuellen Kontext bei und hat die Kontrolle über die Inhalte, die er auf dem Bildschirm sieht.
  • Für zeitkritische Benachrichtigungen gelten die „Bitte nicht stören“-Regeln des Nutzers. Beispielsweise können Nutzer Anrufe nur von bestimmten Kontakten oder von wiederholten Anrufern erlauben, wenn „Bitte nicht stören“ aktiviert ist.
  • Wenn das Display des Geräts ausgeschaltet ist, wird die Vollbild-Intent sofort gestartet.
  • Auf dem Bildschirm Einstellungen des Geräts sehen Nutzer, welche Apps in letzter Zeit Benachrichtigungen gesendet haben, einschließlich bestimmter Benachrichtigungskanäle. Auf diesem Bildschirm können Nutzer ihre 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 Backstack der Aufgabe im Vordergrund.
  • Die App hat eine Aktivität im Backstack einer vorhandenen Aufgabe auf dem Bildschirm „Zuletzt“.

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

  • Die App mit dem Namen finish() hat vor Kurzem eine Aktivität ausgeführt. Dies gilt nur, wenn die App zum Zeitpunkt des Aufrufs von finish() 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 vom System gebunden ist. Für diese Dienste muss möglicherweise eine Benutzeroberfläche gestartet werden.

  • 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 starten kann.

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

  • Die Anwendung empfängt eine PendingIntent, die von einer anderen, sichtbaren Anwendung gesendet wird.

  • Die App empfängt eine Systemübertragung, bei der die App eine Benutzeroberfläche starten soll. Beispiele sind ACTION_NEW_OUTGOING_CALL und SECRET_CODE_ACTION. Die App kann nach dem Senden der Übertragung für einige Sekunden 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. Anwendungsfälle sind beispielsweise vollständig verwaltete Unternehmensgeräte und spezielle Geräte wie digitale Beschilderung und Kioske.

  • Der App wird vom Nutzer die Berechtigung SYSTEM_ALERT_WINDOW gewährt.

Opt-in erforderlich, wenn Aktivitäten aus PendingIntents gestartet werden

Um versehentliches Starten von Aktivitäten aufgrund der aufgeführten Bedingungen zu vermeiden, gibt es ab Android 14 explizite APIs, mit denen Sie festlegen können, ob einer App Berechtigungen für das Starten von Aktivitäten erteilt werden sollen.

Bei Apps, die auf Android 15 oder höher ausgerichtet sind, werden standardmäßig keine Berechtigungen zum Starten von Hintergrundaktivitäten mehr implizit für von ihnen erstellte PendingIntents gewährt. Es ist eine explizite Einwilligung erforderlich. Je nachdem, ob die App PendingIntents sendet oder erstellt, stehen folgende Optionen zur Verfügung:

Tabelle „Ausstehende Intents“
Abbildung 1: Entscheidungsablauf für die Ausführung von Hintergrundaktivitäten

Vom Absender des PendingIntents

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

  • die aufgeführten Bedingungen erfüllen und
  • Aktivieren, um den Start von Hintergrundaktivitäten auf Grundlage dieser Ausnahmen zuzulassen

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

Zum Aktivieren sollte die App ein ActivityOptions-Bundle mit setPendingIntentBackgroundActivityStartMode(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) an PendingIntent.send() oder ähnliche Methoden übergeben.

Vom Ersteller des PendingIntent

Bei Apps, die auf Android 15 oder höher ausgerichtet sind und eine PendingIntent erstellen, muss jetzt ausdrücklich der Start von Hintergrundaktivitäten zugelassen werden, damit diese PendingIntents unter den angegebenen Bedingungen gestartet werden können.

In den meisten Fällen sollte die App, die PendingIntent startet, aktiviert sein. Wenn die App, die erstellt wird, jedoch diese Berechtigungen gewähren muss:

  • Der PendingIntent kann jederzeit gestartet werden, wenn die erstellte App sichtbar ist.
  • Die PendingIntent kann jederzeit gestartet werden, wenn die App, die sie erstellt, spezielle Berechtigungen hat.

Wenn Sie die Funktion aktivieren möchten, muss die App ein ActivityOptions-Bundle mit setPendingIntentCreatorBackgroundActivityStartMode (ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) an die PendingIntent.getActivity()-Methode oder eine ähnliche Methode übergeben.

Weitere Informationen finden Sie in der entsprechenden Referenzdokumentation: