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 lançamento de atividade.
- Por padrão, a atividade é iniciada na mesma tela do chamador. Por exemplo, uma nova instância de uma atividade iniciada no inicializador 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 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 na qual a última atividade foi realizada. 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 aparecerá na mesma tela onde 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 sinalizadorActivityInfo.FLAG_ALLOW_EMBEDDED
. - O lançamento de atividades em monitores privados é permitido apenas para o proprietário ou para as atividades presentes nesse monitor.
Restrições semelhantes se aplicam à adição de janelas aos monitores.
O Android 10 inclui o método ActivityManager#isActivityStartAllowedOnDisplay(Context context, int displayId, Intent intent)
para verificar as restrições de segurança do aplicativo antes de tentar iniciá-lo em uma tela. No Android 9 (e versões anteriores), os resultados de inicialização restritos geram SecurityException
.
A maioria das restrições de segurança são aplicadas no método ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay()
.