活動啟動政策

Activity 啟動行為由應用程式的AndroidManifest.xml檔案中的啟動模式、意圖標誌和呼叫者提供的 ActivityOptions 定義。使用ActivityOption#setLaunchDisplayId(int)來定位活動啟動的特定顯示。

  • 預設情況下,活動會在與呼叫者相同的顯示器上啟動。例如,從啟動器啟動的活動的新執行個體應放置在同一顯示器上,而無需附加標誌或選項。請務必使用正確的上下文(活動與應用程式)進行啟動。
  • 如果從與特定顯示器不關聯的來源(例如從 shell 或應用程式上下文)執行啟動,則該活動將放置在使用者上次與裝置互動或上次活動所在的頂部顯示器上。推出。
  • 啟動活動的意圖可以解析為系統中現有的活動實例。在這種情況下,如果沒有提供額外的標誌,則活動將在上次使用的相同顯示器上顯示。如果使用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()方法中。