Richtlinie zur Aktivierung von Aktivitäten

Das Verhalten beim Starten von Aktivitäten wird durch Startmodi in den AndroidManifest.xml-Dateien von Apps, Intent-Flags und ActivityOptions des Aufrufers definiert. Verwenden Sie ActivityOption#setLaunchDisplayId(int), um das Auslösen einer Aktivität auf ein bestimmtes Display auszurichten.

  • Standardmäßig wird die Aktivität auf demselben Display gestartet wie der Aufrufer. Beispielsweise sollte eine neue Instanz einer im Launcher gestarteten Aktivität auf demselben Bildschirm ohne zusätzliche Flags oder Optionen angezeigt werden. Achten Sie darauf, beim Start den richtigen Kontext (Aktivität oder Anwendung) zu verwenden.
  • Wenn die Aktivität von einer Quelle gestartet wird, die nicht mit einem bestimmten Display verknüpft ist (z. B. von einem Shell- oder Anwendungskontext), wird sie auf dem Display platziert, auf dem der Nutzer zuletzt mit dem Gerät interagiert hat oder von dem die letzte Aktivität gestartet wurde.
  • Die Absicht, eine Aktivität zu starten, kann in eine vorhandene Aktivitätsinstanz im System aufgelöst werden. Wenn in einem solchen Fall keine zusätzlichen Flags angegeben wurden, wird eine Aktivität auf demselben Display angezeigt, auf dem sie zuletzt verwendet wurde. Wenn das Zieldisplay mit ActivityOptions#setTargetDisplayId() angegeben ist, wird die Aktivität auf dieses Display verschoben, sofern dies durch Sicherheits- und andere Einschränkungen zulässig ist.

Sicherheitseinschränkungen

Um zu verhindern, dass schädliche Apps vertrauliche Nutzerdaten missbrauchen, indem sie sie von der Oberfläche eines von ihnen erstellten virtuellen Displays lesen, können Apps in Android 10 ihre eigenen Aktivitäten nur auf einem von ihnen erstellten virtuellen Display starten. Aber:

  • Systemkomponenten mit der Berechtigung INTERNAL_SYSTEM_WINDOW können auf jedem Display gestartet werden.
  • Caller mit der Berechtigung ACTIVITY_EMBEDDING können Aktivitäten aus anderen Apps starten, die das Flag ActivityInfo.FLAG_ALLOW_EMBEDDED haben.
  • Aktivitätsstarts auf privaten Displays sind nur für den Eigentümer oder für Aktivitäten auf diesem Display zulässig.

Ähnliche Einschränkungen gelten für das Hinzufügen von Fenstern zu Displays.

Android 10 enthält die Methode ActivityManager#isActivityStartAllowedOnDisplay(Context context, int displayId, Intent intent), mit der Sicherheitseinschränkungen für die App geprüft werden können, bevor sie auf einem Bildschirm gestartet werden. Unter Android 9 und niedriger wird bei eingeschränkten Startergebnissen SecurityException ausgegeben.

Die meisten Sicherheitseinschränkungen werden bei der ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay()-Methode angewendet.