Multi-Window — to zestaw trybów wielozadaniowości w Androidzie, umożliwiający uruchamianie kilku aplikacji jednocześnie na ekranie. System obejmuje trzy tryby: Split Screen do dzielenia ekranu na dwie części, Picture-in-Picture dla wideo w miniaturowym oknie oraz Freeform dla okien o dowolnym rozmiarze na dużych ekranach. Według danych Android Developers (2025), obsługa Multi-Window jest obowiązkowa dla urządzeń o szerokości ekranu 600 dp i więcej, a każdy programista musi dostosować aplikację do możliwych zmian rozmiaru okna.
Najważniejsze
Multi-Window — to funkcja Androida wprowadzona w wersji 7.0 Nougat (API 24), która umożliwia uruchamianie dwóch lub więcej aplikacji jednocześnie na ekranie. Tryb ten stał się odpowiedzią Google na rosnącą popularność tabletów i urządzeń z dużym ekranem, gdzie tryb jednozadaniowy ogranicza produktywność.
Przed Androidem 7.0 każda aplikacja zajmowała cały ekran — przy przełączaniu między aplikacjami poprzednia była zwijana. Multi-Window zmienił ten model: teraz aplikacja może zajmować część ekranu, pozostając w stanie aktywnym. Dla programisty oznacza to, że onConfigurationChanged i obsługa zmian rozmiarów stają się obowiązkowe.
W Androidzie 12L (2022) Google uczynił Multi-Window trybem domyślnym dla urządzeń z dużym ekranem — wszystkie aplikacje na tabletach uruchamiają się w trybie dopuszczającym wielookienkowość. Wyjątkiem są tylko aplikacje z wyraźnym zakazem w manifeście.
Split Screen — najpopularniejszy tryb. Ekran dzieli się na dwie części w poziomie lub pionie, użytkownik przeciąga separator. Dostępny w telefonach i tabletach. Uruchamiany przez Overview (Recents) — przeciągnięcie ikony aplikacji do górnej lub dolnej krawędzi.
Picture-in-Picture (PiP) — tryb dla aplikacji wideo i nawigacyjnych. Treść wyświetlana jest w pływającym miniaturowym oknie (około 15–25% ekranu), które można przesuwać. Dostępny w Androidzie 8.0+. Do aktywacji używa się enterPictureInPictureMode() w Activity.
Freeform — tryb okien o dowolnym rozmiarze, podobny do desktopowych menedżerów okien. Dostępny na Android TV i niektórych urządzeniach z dużym ekranem producentów (Samsung DeX). Aplikacje uruchamiają się w oknach z nagłówkiem i przyciskami sterowania.
Gdy użytkownik aktywuje Multi-Window, Android tworzy nowy egzemplarz Activity dla każdej aplikacji i rozdziela dostępne miejsce na ekranie. Aktywności umieszczane są w osobnych zadaniach (Task), ale korzystają z tego samego StackView z separatorem między nimi.
System powiadamia każdą Activity o zmianie rozmiaru przez onConfigurationChanged(). Jeśli Activity nie obsługuje tego zdarzenia — jest odtwarzana (recreate). Dla Split Screen szerokość okna może zmniejszyć się do 220 dp — minimalnej szerokości obsługiwanej przez platformę.
Android umożliwia aplikacji zadeklarowanie minimalnej szerokości przez android:minWidth i android:minHeight w manifeście. Jeśli dostępne miejsce jest mniejsze niż podane wartości — Activity przechodzi w stan wstrzymania.
Aby obsługiwać Multi-Window, należy ustawić flagę android:resizeableActivity="true" w manifeście. Oznacza to, że aplikacja może zmieniać rozmiar przy zmianie okna. Domyślnie w Androidzie 12L+ wszystkie aplikacje są uznawane za resizeable — flaga jest ignorowana.
Przy zmianie rozmiaru okna Activity może być odtworzona (domyślnie) lub obsłużyć zdarzenie w onConfigurationChanged, jeśli w manifeście podano configChanges="screenSize|smallestScreenSize". Zaleca się podawanie configChanges dla kluczowych Activity, aby uniknąć utraty stanu.
<activity
android:name=".MainActivity"
android:resizeableActivity="true"
android:configChanges="screenSize|smallestScreenSize|orientation" />
Dla aplikacji, które nie obsługują zmiany rozmiaru, Android wyświetla okno dialogowe z ostrzeżeniem. W tym przypadku przy przełączaniu do trybu wielookienkowego system może zakończyć Activity i pokazać snackbar z propozycją ponownego uruchomienia.
Multi-Window zmienia standardowy cykl życia Activity. Gdy inna aplikacja staje się aktywna w sąsiednim oknie, bieżąca Activity otrzymuje wywołanie onPause(), ale nie onStop() — pozostaje widoczna, choć nie w fokusie. To ważne: odtwarzacz wideo powinien kontynuować odtwarzanie po onPause, a nie po onStop.
Programista musi rozróżniać stany: onPause + isInMultiWindowMode() = true oznacza tylko utratę fokusu, a nie zejście z ekranu. Dla wideo i animacji to sygnał, aby nie zatrzymywać odtwarzania, a jedynie zdjąć podświetlenie z elementów sterowania.
Przy wyjściu z Multi-Window onMultiWindowModeChanged() jest wywoływane przed onResume(). Daje to możliwość przebudowania interfejsu do trybu pełnoekranowego, zanim użytkownik rozpocznie interakcję.
Pierwsza zasada — zachowywać stan. W trybie wielookienkowym Activity może być odtworzona w dowolnym momencie. Używaj SavedStateHandle w ViewModel lub onSaveInstanceState dla wszystkich danych, które muszą być zachowane między zmianami konfiguracji.
Druga — testować na minimalnej szerokości 220 dp. Ta wartość jest uznawana za najwęższe okno w Split Screen. Interfejs musi pozostać czytelny i funkcjonalny. Jeśli jakieś elementy wychodzą poza granice — używaj Window Size Class do przełączania między układami.
Trzecia — wyłączać funkcjonalność, która nie działa w Multi-Window. Na przykład Camera może być niedostępna, jeśli ekran jest zbyt mały. Sprawdzaj isInMultiWindowMode() przed uruchomieniem kamery lub innych funkcji pełnoekranowych.
Często zadawane pytania
Ustaw android:resizeableActivity="false" w manifeście. W Androidzie 12L+ flaga jest ignorowana dla urządzeń z dużym ekranem, dlatego do całkowitego wyłączenia użyj android:maxAspectRatio.
Wywołaj isInMultiWindowMode() z Activity. Metoda zwraca true, jeśli aplikacja działa w Split Screen, PiP lub Freeform. Można także zasubskrybować się na onMultiWindowModeChanged().
Na Android TV dostępny jest tylko tryb Picture-in-Picture. Split Screen i Freeform nie są obsługiwane — telewizory używają jednego głównego ekranu z oknem PiP w rogu.
Foreground-serwis kontynuuje działanie niezależnie od trybu. Jeśli jednak aplikacja przechodzi do PiP, system może tymczasowo wstrzymać wykonanie w celu oszczędzania zasobów.
Android obsługuje Drag and Drop między oknami w Multi-Window przez ClipData i View.OnDragListener. Dane są przesyłane przez ContentProvider lub Intent z FLAG_GRANT_READ_URI_PERMISSION.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również