Hành vi chạy hoạt động được xác định bằng các chế độ chạy trong tệp AndroidManifest.xml của ứng dụng, cờ ý định và ActivityOptions do phương thức gọi cung cấp. Sử dụng ActivityOption#setLaunchDisplayId(int) để nhắm đến một màn hình cụ thể khi chạy hoạt động.
- Theo mặc định, hoạt động này sẽ chạy trên cùng màn hình với phương thức gọi. Ví dụ: một phiên bản mới của hoạt động bắt đầu từ trình chạy sẽ được đặt trên cùng một màn hình mà không có thêm cờ hoặc lựa chọn. Hãy nhớ sử dụng đúng ngữ cảnh (Hoạt động so với Ứng dụng) để khởi chạy.
- Nếu quá trình khởi chạy được thực hiện từ một nguồn không liên kết với một màn hình cụ thể (chẳng hạn như từ một trình bao hoặc ngữ cảnh Ứng dụng), thì hoạt động sẽ được đặt trên màn hình trên cùng mà người dùng đã tương tác gần đây nhất với thiết bị hoặc từ đó hoạt động gần đây nhất đã được khởi chạy.
- Ý định chạy một hoạt động có thể được phân giải thành một phiên bản hoạt động hiện có trong hệ thống. Trong trường hợp đó, nếu không có cờ bổ sung nào được cung cấp, thì một hoạt động sẽ xuất hiện trên cùng một màn hình nơi hoạt động đó được sử dụng lần gần đây nhất. Nếu màn hình đích được chỉ định bằng
ActivityOptions#setTargetDisplayId(), thì hoạt động sẽ được chuyển đến màn hình đó (nếu được phép theo các quy định hạn chế về bảo mật và các quy định hạn chế khác).
Quy định hạn chế về bảo mật
Để ngăn ứng dụng độc hại chiếm đoạt thông tin nhạy cảm của người dùng bằng cách đọc thông tin đó từ bề mặt của màn hình ảo mà ứng dụng đã tạo, các ứng dụng chỉ có thể khởi chạy hoạt động của riêng mình trên màn hình ảo do ứng dụng tạo trong Android 10. Tuy nhiên:
- Các thành phần hệ thống có quyền
INTERNAL_SYSTEM_WINDOWcó thể chạy trên mọi màn hình. - Những người gọi có quyền
ACTIVITY_EMBEDDINGcó thể chạy các hoạt động từ những ứng dụng khác có cờActivityInfo.FLAG_ALLOW_EMBEDDED. - Chỉ chủ sở hữu hoặc các hoạt động có trên màn hình đó mới được phép chạy hoạt động trên màn hình riêng tư.
Các quy định hạn chế tương tự cũng áp dụng cho việc thêm cửa sổ vào màn hình.
Android 10 bao gồm phương thức ActivityManager#isActivityStartAllowedOnDisplay(Context context, int
displayId, Intent intent) để kiểm tra các hạn chế về bảo mật đối với ứng dụng trước khi cố gắng chạy trên màn hình. Trong Android 9 (trở xuống), kết quả khởi chạy bị hạn chế sẽ gửi SecurityException.
Hầu hết các quy định hạn chế về bảo mật đều được áp dụng trong phương thức ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay().