Начиная с 27 марта 2025 г. мы рекомендуем использовать android-latest-release
вместо aosp-main
для создания и участия в AOSP. Дополнительные сведения см. в разделе Изменения в AOSP .
Политика запуска активности
Оптимизируйте свои подборки
Сохраняйте и классифицируйте контент в соответствии со своими настройками.
Поведение запуска активности определяется режимами запуска в файлах AndroidManifest.xml
приложений, флагами намерений и ActivityOptions, предоставленными вызывающей стороной. Используйте ActivityOption#setLaunchDisplayId(int)
чтобы указать конкретный дисплей для запуска активности.
- По умолчанию активность запускается на том же дисплее, что и вызывающая сторона. Например, новый экземпляр активности, запущенный из лаунчера, должен быть размещен на том же дисплее без дополнительных флагов или опций. Обязательно используйте правильный контекст (Активность или Приложение) для запуска.
- Если запуск выполняется из источника, не связанного с конкретным дисплеем (например, из оболочки или контекста приложения), то действие помещается на верхний дисплей, на котором пользователь последний раз взаимодействовал с устройством или с которого было запущено последнее действие.
- Намерение запустить действие может быть разрешено существующим экземпляром действия в системе. В таком случае, если не были предоставлены дополнительные флаги, действие отображается на том же дисплее, где оно использовалось в последний раз. Если целевой дисплей указан с помощью
ActivityOptions#setTargetDisplayId()
, то действие перемещается на этот дисплей (если это разрешено безопасностью и другими ограничениями).
Ограничения по соображениям безопасности
Чтобы предотвратить незаконное присвоение вредоносным приложением конфиденциальной информации пользователя путем считывания ее с поверхности созданного им виртуального дисплея, в Android 10 приложения могут запускать собственные действия только на созданном ими виртуальном дисплее. Однако:
- Компоненты системы с разрешением
INTERNAL_SYSTEM_WINDOW
могут запускаться на любом дисплее. - Абоненты с разрешением
ACTIVITY_EMBEDDING
могут запускать действия из других приложений, имеющих флаг ActivityInfo.FLAG_ALLOW_EMBEDDED
. - Запуск мероприятий на частных дисплеях разрешен только владельцу или тем мероприятиям, которые присутствуют на этом дисплее.
Аналогичные ограничения применяются к добавлению окон на дисплеи.
Android 10 включает метод ActivityManager#isActivityStartAllowedOnDisplay(Context context, int displayId, Intent intent)
для проверки ограничений безопасности для приложения перед попыткой запуска на дисплее. В Android 9 (и ниже) результаты ограниченного запуска выдают SecurityException
.
Большинство ограничений безопасности применяются в методе ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay()
.
Контент и образцы кода на этой странице предоставлены по лицензиям. Java и OpenJDK – это зарегистрированные товарные знаки корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2025-07-29 UTC.
[[["Прост для понимания","easyToUnderstand","thumb-up"],["Помог мне решить мою проблему","solvedMyProblem","thumb-up"],["Другое","otherUp","thumb-up"]],[["Отсутствует нужная мне информация","missingTheInformationINeed","thumb-down"],["Слишком сложен/слишком много шагов","tooComplicatedTooManySteps","thumb-down"],["Устарел","outOfDate","thumb-down"],["Проблема с переводом текста","translationIssue","thumb-down"],["Проблемы образцов/кода","samplesCodeIssue","thumb-down"],["Другое","otherDown","thumb-down"]],["Последнее обновление: 2025-07-29 UTC."],[],[],null,["# Activity launch policy\n\n*Activity launch behavior* is defined by launch modes in the\n`AndroidManifest.xml` files of apps, intent flags, and ActivityOptions\nprovided by the caller. Use `ActivityOption#setLaunchDisplayId(int)` to\ntarget a specific display for activity launch.\n\n- By default, the activity launches on the same display as the caller. For example, a new instance of an activity started from the launcher should be placed on the same display without additional flags or options. Be sure to use the correct context (Activity versus Application) for launch.\n- If the launch is performed from a source not associated with a specific display (such as from a shell or Application context), then the activity is placed on the top display on which the user last interacted with the device or from which the last activity was launched.\n- Intent to launch an activity can be resolved to an existing activity instance in the system. In such a case, if no additional flags were provided, an activity surfaces on the same display where it was last used. If the target display is specified with `ActivityOptions#setTargetDisplayId()`, then the activity is moved to that display (if allowed by security and other restrictions).\n\nSecurity restrictions\n---------------------\n\nTo prevent a malicious app from misappropriating user-sensitive information\nby reading it from the surface of a virtual display that it has created, apps can\nlaunch their own activities *only* on a virtual display of their creation\nin Android 10. However:\n\n- System components with the `INTERNAL_SYSTEM_WINDOW` permission can launch on any display.\n- Callers with the `ACTIVITY_EMBEDDING` permission can launch activities from other apps that have the flag `ActivityInfo.FLAG_ALLOW_EMBEDDED`.\n- Activity launches on private displays are allowed only for the owner or activities present on that display.\n\nSimilar restrictions apply to adding windows to displays.\n\nAndroid 10 includes the\n`ActivityManager#isActivityStartAllowedOnDisplay(Context context, int\ndisplayId, Intent intent)` method to check security restrictions for the\napp before attempting to launch on a display. In Android 9\n(and lower), restricted launch results throw `SecurityException`.\n\nMost security restrictions are applied in the\n`ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay()` method."]]