Norme relative al lancio delle attività

Il comportamento di avvio dell'attività è definito dalle modalità di avvio nei file AndroidManifest.xml delle app, dai flag intent e da ActivityOptions forniti dal chiamante. Utilizza ActivityOption#setLaunchDisplayId(int) per scegliere 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 da Avvio app deve essere posizionata sullo stesso display senza ulteriori flag o opzioni. Assicurati di utilizzare il contesto corretto (Attività anziché Applicazione) per l'avvio.
  • Se l'avvio viene eseguito da un'origine non associata a un display specifico (ad esempio da una shell o dal contesto dell'applicazione), l'attività viene posizionata sul display superiore con cui l'utente ha interagito per ultimo con il dispositivo o da cui è stata avviata l'ultima attività.
  • L'intent di avviare un'attività può essere risolto in un'istanza di attività esistente nel sistema. In questo caso, se non sono stati forniti ulteriori flag, un'attività viene visualizzata sullo stesso display in cui è stata utilizzata l'ultima volta. Se il display di destinazione è specificato con ActivityOptions#setTargetDisplayId(), l'attività viene spostata su quel display (se consentito dalla sicurezza e da altre limitazioni).

Limitazioni di sicurezza

Per impedire a un'app dannosa di appropriarsi indebitamente di informazioni sensibili dell'utente leggendole dalla superficie di un display virtuale che ha creato, le app possono avviare le proprie attività solo su un display virtuale di propria 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 con il flag ActivityInfo.FLAG_ALLOW_EMBEDDED.
  • L'avvio di attività su display privati è consentito solo al proprietario o alle attività presenti su quel display.

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

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

La maggior parte delle limitazioni di sicurezza viene applicata nel metodo ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay().