Politica di lancio delle attività

Il comportamento di avvio dell'attività è definito dalle modalità di avvio nei file AndroidManifest.xml delle app, dai flag di intento e dalle ActivityOptions fornite dal chiamante. Utilizza ActivityOption#setLaunchDisplayId(int) per scegliere come target un display specifico per l'avvio dell'attività.

  • Per impostazione predefinita, l'attività viene avviata sullo stesso display del chiamante. Ad esempio, una nuova istanza di un'attività avviata dal programma di avvio dovrebbe essere posizionata sullo stesso display senza flag o opzioni aggiuntivi. Assicurati di utilizzare il contesto corretto (Attività o Applicazione) per il lancio.
  • Se l'avvio viene eseguito da una fonte non associata a un display specifico (ad esempio da una shell o da un contesto dell'applicazione), l'attività viene posizionata sul display superiore su cui l'utente ha interagito per l'ultima volta con il dispositivo o da cui è stata eseguita l'ultima attività. lanciato.
  • L'intento di avviare un'attività può essere risolto in un'istanza di attività esistente nel sistema. In tal caso, se non sono stati forniti flag aggiuntivi, un'attività viene visualizzata sullo stesso display in cui è stata utilizzata l'ultima volta. Se la visualizzazione di destinazione viene specificata con ActivityOptions#setTargetDisplayId() , l'attività viene spostata su quella visualizzazione (se consentito dalla sicurezza e da altre restrizioni).

Restrizioni di sicurezza

Per evitare che un'app dannosa si appropri indebitamente di informazioni sensibili dell'utente leggendole dalla superficie di un display virtuale da essa creato, le app possono avviare le proprie attività solo su un display virtuale di loro creazione in Android 10. Tuttavia:

  • I componenti di sistema con l'autorizzazione INTERNAL_SYSTEM_WINDOW possono essere avviati su qualsiasi display.
  • I chiamanti con l'autorizzazione ACTIVITY_EMBEDDING possono avviare attività da altre app che hanno il flag ActivityInfo.FLAG_ALLOW_EMBEDDED .
  • L'avvio di attività su display privati ​​è consentito solo al proprietario o alle attività presenti su quel display.

Restrizioni simili si applicano all'aggiunta di finestre ai display.

Android 10 include il metodo ActivityManager#isActivityStartAllowedOnDisplay(Context context, int displayId, Intent intent) per verificare le restrizioni di sicurezza per l'app prima di tentare l'avvio su un display. In Android 9 (e versioni precedenti), i risultati di avvio limitato lanciano SecurityException .

La maggior parte delle restrizioni di sicurezza vengono applicate nel metodo ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay() .