Política de lançamento de atividades

O comportamento de inicialização da atividade é definido pelos modos de inicialização nos arquivos AndroidManifest.xml de aplicativos, sinalizadores de intenção e ActivityOptions fornecidos pelo chamador. Use ActivityOption#setLaunchDisplayId(int) para direcionar uma exibição específica para o início da atividade.

  • Por padrão, a atividade é iniciada na mesma tela que o chamador. Por exemplo, uma nova instância de uma atividade iniciada no iniciador deve ser colocada na mesma tela sem sinalizadores ou opções adicionais. Certifique-se de usar o contexto correto (Atividade versus Aplicativo) para iniciar.
  • Se a inicialização for realizada a partir de uma fonte não associada a uma tela específica (como de um shell ou contexto de aplicativo), a atividade será colocada na tela superior na qual o usuário interagiu pela última vez com o dispositivo ou a partir da qual a última atividade foi lançado.
  • A intenção de iniciar uma atividade pode ser resolvida para uma instância de atividade existente no sistema. Nesse caso, se nenhum sinalizador adicional for fornecido, uma atividade será exibida na mesma tela em que foi usada pela última vez. Se a exibição de destino for especificada com ActivityOptions#setTargetDisplayId() , a atividade será movida para essa exibição (se permitido pela segurança e outras restrições).

Restrições de segurança

Para evitar que um aplicativo malicioso se aproprie indevidamente de informações confidenciais do usuário lendo-as na superfície de uma tela virtual que ele criou, os aplicativos podem iniciar suas próprias atividades apenas em uma tela virtual criada por eles no Android 10. No entanto:

  • Os componentes do sistema com a permissão INTERNAL_SYSTEM_WINDOW podem ser iniciados em qualquer monitor.
  • Os chamadores com a permissão ACTIVITY_EMBEDDING podem iniciar atividades de outros aplicativos que tenham o sinalizador ActivityInfo.FLAG_ALLOW_EMBEDDED .
  • Lançamentos de atividades em monitores privados são permitidos apenas para o proprietário ou atividades presentes naquele monitor.

Restrições semelhantes se aplicam à adição de janelas a monitores.

O Android 10 inclui o ActivityManager#isActivityStartAllowedOnDisplay(Context context, int displayId, Intent intent) para verificar as restrições de segurança do aplicativo antes de tentar iniciar em uma tela. No Android 9 (e inferior), os resultados de inicialização restritos lançam SecurityException .

A maioria das restrições de segurança são aplicadas no método ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay() .