Chính sách ra mắt hoạt động

Hành vi khởi chạy hoạt động được xác định bởi các chế độ khởi chạy trong tệp AndroidManifest.xml của ứng dụng, cờ ý định và Tùy chọn hoạt động do người gọi cung cấp. Sử dụng ActivityOption#setLaunchDisplayId(int) để nhắm mục tiêu một màn hình cụ thể để khởi chạy hoạt động.

  • Theo mặc định, hoạt động sẽ khởi chạy trên cùng màn hình với người gọi. Ví dụ: phiên bản mới của hoạt động được bắt đầu từ trình khởi chạy phải được đặt trên cùng một màn hình mà không có cờ hoặc tùy chọn bổ sung. Hãy đảm bảo sử dụng đúng ngữ cảnh (Hoạt động so với Ứng dụng) để khởi chạy.
  • Nếu việc khởi chạy được thực hiện từ một nguồn không được liên kết với một màn hình cụ thể (chẳng hạn như từ một shell hoặc bối cảnh Ứng dụng), thì hoạt động đó sẽ được đặt trên màn hình trên cùng nơi người dùng tương tác lần cuối với thiết bị hoặc từ đó hoạt động cuối cùng được thực hiện đã ra mắt.
  • Ý định khởi 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 như vậy, nếu không có cờ bổ sung nào được cung cấp thì hoạt động sẽ hiển thị trên cùng màn hình nơi nó được sử dụng lần cuối. Nếu màn hình mục tiêu được chỉ định bằng ActivityOptions#setTargetDisplayId() thì hoạt động sẽ được chuyển sang màn hình đó (nếu được cho phép bởi bảo mật và các hạn chế khác).

Hạn chế 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à nó đã tạo, các ứng dụng chỉ có thể khởi chạy các hoạt động của riêng chúng trên màn hình ảo do chúng tạo ra trong Android 10. Tuy nhiên:

  • Các thành phần hệ thống có quyền INTERNAL_SYSTEM_WINDOW có thể khởi chạy trên bất kỳ màn hình nào.
  • Người gọi có quyền ACTIVITY_EMBEDDING có thể khởi chạy các hoạt động từ các ứng dụng khác có cờ ActivityInfo.FLAG_ALLOW_EMBEDDED .
  • Hoạt động khởi chạy trên màn hình riêng tư chỉ được phép dành cho chủ sở hữu hoặc các hoạt động có trên màn hình đó.

Các 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ế bảo mật cho ứng dụng trước khi thử khởi chạy trên màn hình. Trong Android 9 (và phiên bản thấp hơn), kết quả khởi chạy bị hạn chế sẽ đưa ra SecurityException .

Hầu hết các hạn chế bảo mật được áp dụng trong phương thức ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay() .