El comportamiento de inicio de la actividad se define mediante los modos de inicio en los archivos AndroidManifest.xml de las apps, los indicadores de intent y ActivityOptions que proporciona la entidad que realiza la llamada. Usa ActivityOption#setLaunchDisplayId(int) para segmentar una pantalla específica para el inicio de la actividad.
- De forma predeterminada, la actividad se inicia en la misma pantalla que la entidad que realiza la llamada. Por ejemplo, una instancia nueva de una actividad que se inicia desde el selector debe colocarse en la misma pantalla sin indicadores ni opciones adicionales. Asegúrate de usar el contexto correcto (Activity versus Application) para el inicio.
- Si el inicio se realiza desde una fuente no asociada con una pantalla específica (como desde un shell o un contexto de Application), la actividad se coloca en la pantalla superior en la que el usuario interactuó por última vez con el dispositivo o desde la que se inició la última actividad.
- El intent para iniciar una actividad se puede resolver en una instancia de actividad existente en el sistema. En ese caso, si no se proporcionaron indicadores adicionales, una actividad aparece en la misma pantalla en la que se usó por última vez. Si la pantalla de destino se especifica con
ActivityOptions#setTargetDisplayId(), la actividad se mueve a esa pantalla (si lo permiten la seguridad y otras restricciones).
Restricciones de seguridad
Para evitar que una app maliciosa se apropie de información sensible del usuario leyéndola desde la superficie de una pantalla virtual que creó, las apps pueden iniciar sus propias actividades solo en una pantalla virtual de su creación en Android 10. Sin embargo, ten en cuenta lo siguiente:
- Los componentes del sistema con el permiso
INTERNAL_SYSTEM_WINDOWse pueden iniciar en cualquier pantalla. - Las entidades que realizan la llamada con el permiso
ACTIVITY_EMBEDDINGpueden iniciar actividades desde otras apps que tengan el indicadorActivityInfo.FLAG_ALLOW_EMBEDDED. - Los inicios de actividad en pantallas privadas solo se permiten para el propietario o las actividades presentes en esa pantalla.
Se aplican restricciones similares para agregar ventanas a las pantallas.
Android 10 incluye el
ActivityManager#isActivityStartAllowedOnDisplay(Context context, int
displayId, Intent intent) método para verificar las restricciones de seguridad de la
app antes de intentar iniciarla en una pantalla. En Android 9 (y versiones anteriores), los resultados de inicio restringido arrojan SecurityException.
La mayoría de las restricciones de seguridad se aplican en el método ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay().