Zasady uruchamiania aktywności

Zachowanie podczas uruchamiania aktywności jest definiowane przez tryby uruchamiania w plikach AndroidManifest.xml aplikacji, flagi intencji i opcji ActivityOptions przekazanych przez wywołującego. Użyj właściwości ActivityOption#setLaunchDisplayId(int), aby ustawić kierowanie na określone wyświetlanie związane z uruchomieniem działania.

  • Domyślnie aktywność uruchamia się na tym samym ekranie co wywołujący. Na przykład nowy egzemplarz aktywności uruchomionej z poziomu menu powinno się umieścić na tym samym ekranie bez dodatkowych flag lub opcji. Pamiętaj, aby podczas uruchamiania używać właściwego kontekstu (czynność lub aplikacja).
  • Jeśli uruchamianie odbywa się ze źródła, które nie jest powiązane z określonym wyświetlaczem (np. z otoczki lub kontekstu aplikacji), aktywność jest umieszczana na górnym wyświetlaczu, na którym użytkownik ostatnio wszedł w interakcję z urządzeniem lub z którego została uruchomiona ostatnia aktywność.
  • Intencja uruchomienia aktywności może być rozwiązywana przez istniejący w systemie przypadek użycia aktywności. W takim przypadku, jeśli nie zostały podane żadne dodatkowe flagi, aktywność pojawi się na tym samym ekranie, na którym była ostatnio używana. Jeśli docelowy wyświetlacz jest określony za pomocą parametru ActivityOptions#setTargetDisplayId(), aktywność jest przenoszona na ten wyświetlacz (jeśli jest to dozwolone ze względu na zabezpieczenia i inne ograniczenia).

Ograniczenia zabezpieczeń

Aby uniemożliwić złośliwej aplikacji nieprawidłowe wykorzystanie poufnych informacji użytkownika przez odczytanie ich z powierzchni utworzonego przez nią wirtualnego wyświetlacza, aplikacje mogą uruchamiać własne działania tylko na utworzonym przez siebie wirtualnym wyświetlaczu w Androidzie 10. Jednak:

  • Komponenty systemowe z uprawnieniami INTERNAL_SYSTEM_WINDOW mogą być uruchamiane na dowolnym wyświetlaczu.
  • Osoby dzwoniące z uprawnieniami ACTIVITY_EMBEDDING mogą uruchamiać aktywności z innych aplikacji, które mają flagę ActivityInfo.FLAG_ALLOW_EMBEDDED.
  • Aktywność na wyświetlaczach prywatnych jest dozwolona tylko dla właściciela lub w przypadku określonych na nim czynności.

Podobne ograniczenia dotyczą dodawania okien do wyświetlaczy.

Android 10 zawiera metodę ActivityManager#isActivityStartAllowedOnDisplay(Context context, int displayId, Intent intent), która umożliwia sprawdzenie ograniczeń zabezpieczeń aplikacji przed próbą uruchomienia jej na wyświetlaczu. W Androidzie 9 (i starszych) ograniczone uruchamianie powoduje błąd SecurityException.

Większość ograniczeń bezpieczeństwa jest stosowanych w przypadku metody ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay().