Richtlinie zum Starten der Aktivität

Das Aktivitätsstartverhalten wird durch die Startmodi in den AndroidManifest.xml Dateien der Apps, Absichtsflags und ActivityOptions definiert, die vom Aufrufer bereitgestellt werden. Verwenden Sie ActivityOption#setLaunchDisplayId(int) um eine bestimmte Anzeige für den Aktivitätsstart auszuwählen.

  • Standardmäßig wird die Aktivität auf demselben Display wie der Anrufer gestartet. Beispielsweise sollte eine neue Instanz einer über den Launcher gestarteten Aktivität ohne zusätzliche Flags oder Optionen auf derselben Anzeige platziert werden. Stellen Sie sicher, dass Sie für den Start den richtigen Kontext (Aktivität versus Anwendung) verwenden.
  • Wenn der Start von einer Quelle aus erfolgt, die nicht mit einem bestimmten Display verknüpft ist (z. B. von einer Shell oder einem Anwendungskontext), wird die Aktivität auf dem oberen Display platziert, auf dem der Benutzer zuletzt mit dem Gerät interagiert hat oder von dem aus die letzte Aktivität stattfand gestartet.
  • Die Absicht, eine Aktivität zu starten, kann auf eine vorhandene Aktivitätsinstanz im System zurückgeführt werden. Wenn in einem solchen Fall keine zusätzlichen Flags bereitgestellt wurden, wird eine Aktivität auf derselben Anzeige angezeigt, auf der sie zuletzt verwendet wurde. Wenn die Zielanzeige mit ActivityOptions#setTargetDisplayId() angegeben ist, wird die Aktivität auf diese Anzeige verschoben (sofern die Sicherheit und andere Einschränkungen dies zulassen).

Sicherheitsbeschränkungen

Um zu verhindern, dass eine bösartige App benutzersensible Informationen missbraucht, indem sie diese von der Oberfläche eines von ihr erstellten virtuellen Displays liest, können Apps ihre eigenen Aktivitäten nur auf einem virtuellen Display ihrer Erstellung in Android 10 starten. Allerdings:

  • Systemkomponenten mit der Berechtigung INTERNAL_SYSTEM_WINDOW können auf jedem Display gestartet werden.
  • Aufrufer mit der Berechtigung ACTIVITY_EMBEDDING können Aktivitäten von anderen Apps starten, die über das Flag ActivityInfo.FLAG_ALLOW_EMBEDDED verfügen.
  • Aktivitätsstarts auf privaten Displays sind nur für den Eigentümer oder die auf diesem Display vorhandenen Aktivitäten 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) um Sicherheitseinschränkungen für die App zu überprüfen, bevor versucht wird, sie auf einem Display zu starten. In Android 9 (und niedriger) lösen eingeschränkte Startergebnisse SecurityException aus.

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