Zachowanie podczas uruchamiania aktywności jest definiowane przez tryby uruchamiania w plikach AndroidManifest.xml aplikacji, flagi intencji i ActivityOptions udostępniane przez wywołującego. Aby kierować aktywność na konkretny ekran, użyj ActivityOption#setLaunchDisplayId(int).
- Domyślnie aktywność jest uruchamiana na tym samym ekranie co wywołujący. Na przykład nowa instancja aktywności uruchomiona z programu uruchamiającego powinna zostać umieszczona na tym samym ekranie bez dodatkowych flag ani opcji. Pamiętaj, aby do uruchomienia użyć prawidłowego kontekstu (aktywność lub aplikacja).
- Jeśli uruchomienie nastąpi ze źródła niezwiązanego z konkretnym ekranem (np. z powłoki lub kontekstu aplikacji), aktywność zostanie umieszczona na górnym ekranie, na którym użytkownik ostatnio wchodził w interakcję z urządzeniem lub z którego została uruchomiona ostatnia aktywność.
- Intencję uruchomienia aktywności można rozwiązać na podstawie istniejącej w systemie instancji aktywności. W takim przypadku, jeśli nie podano żadnych dodatkowych flag, aktywność pojawi się na tym samym ekranie, na którym była ostatnio używana. Jeśli ekran docelowy jest określony za pomocą
ActivityOptions#setTargetDisplayId(), aktywność zostanie przeniesiona na ten ekran (jeśli zezwalają na to zabezpieczenia i inne ograniczenia).
Ograniczenia bezpieczeństwa
Aby uniemożliwić złośliwej aplikacji przywłaszczenie informacji wrażliwych dla użytkownika przez odczytanie ich z powierzchni utworzonego przez nią wirtualnego ekranu, w Androidzie 10 aplikacje mogą uruchamiać własne aktywności tylko na wirtualnym ekranie utworzonym przez siebie. Przy czym:
- Komponenty systemowe z uprawnieniem
INTERNAL_SYSTEM_WINDOWmogą być uruchamiane na dowolnym ekranie. - Wywołujący z uprawnieniem
ACTIVITY_EMBEDDINGmogą uruchamiać aktywności z innych aplikacji, które mają flagęActivityInfo.FLAG_ALLOW_EMBEDDED. - Uruchamianie aktywności na ekranach prywatnych jest dozwolone tylko dla właściciela lub aktywności obecnych na tym ekranie.
Podobne ograniczenia obowiązują w przypadku dodawania okien do ekranów.
Android 10 zawiera metodę
ActivityManager#isActivityStartAllowedOnDisplay(Context context, int
displayId, Intent intent), która umożliwia sprawdzenie ograniczeń bezpieczeństwa aplikacji przed próbą uruchomienia jej na ekranie. W Androidzie 9 (i starszych wersjach) ograniczone uruchomienie powoduje zgłoszenie SecurityException.
Większość ograniczeń bezpieczeństwa jest stosowana w metodzie ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay().