Multi-Window — это набор режимов многозадачности в Android, позволяющий запускать несколько приложений на экране одновременно. Система включает три режима: Split Screen для разделения экрана на две части, Picture-in-Picture для видео в мини-окне и Freeform для окон произвольного размера на больших экранах. По данным Android Developers (2025), поддержка Multi-Window обязательна для устройств с шириной экрана 600 dp и больше, и каждый разработчик должен адаптировать приложение к возможным изменениям размеров окна.
Главное
Multi-Window — это функция Android, введённая в версии 7.0 Nougat (API 24), которая позволяет запускать два и более приложения на экране одновременно. Режим стал ответом Google на растущую популярность планшетов и крупноэкранных устройств, где однозадачный режим ограничивает продуктивность.
До Android 7.0 каждое приложение занимало весь экран — при переключении между приложениями предыдущее сворачивалось. Multi-Window изменил эту модель: теперь приложение может занимать часть экрана, сохраняя активное состояние. Для разработчика это означает, что onConfigurationChanged и обработка изменения размеров становятся обязательными.
На Android 12L (2022) Google сделал Multi-Window режимом по умолчанию для устройств с большим экраном — все приложения на планшетах запускаются в режиме, допускающем многооконность. Исключение — только приложения с явным запретом в манифесте.
Split Screen — самый распространённый режим. Экран делится на две части по горизонтали или вертикали, пользователь перетаскивает разделитель. Доступен на телефонах и планшетах. Запускается через Overview (Recents) — перетаскиванием иконки приложения к верхнему или нижнему краю.
Picture-in-Picture (PiP) — режим для видео- и навигационных приложений. Контент отображается в плавающем мини-окне (примерно 15–25% экрана), которое можно перемещать. Доступен на Android 8.0+. Для активации используется enterPictureInPictureMode() в Activity.
Freeform — режим окон произвольного размера, похожий на десктопные оконные менеджеры. Доступен на Android TV и некоторых крупноэкранных устройствах производителей (Samsung DeX). Приложения запускаются в окнах с заголовком и кнопками управления.
Когда пользователь активирует Multi-Window, Android создаёт новый экземпляр Activity для каждого приложения и распределяет доступное пространство экрана. Активности размещаются в отдельных Task, но используют один и тот же StackView с разделителем между ними.
Система уведомляет каждую Activity об изменении размера через onConfigurationChanged(). Если Activity не обрабатывает это событие — она пересоздаётся (recreate). Для Split Screen ширина окна может уменьшиться до 220 dp — минимальной ширины, поддерживаемой платформой.
Android позволяет приложению объявить минимальную ширину через android:minWidth и android:minHeight в манифесте. Если доступное пространство меньше указанных значений — Activity переходит в паузу.
Для поддержки Multi-Window необходимо установить флаг android:resizeableActivity="true" в манифесте. Это означает, что приложение может менять размер при изменении окна. По умолчанию на Android 12L+ все приложения считаются resizeable — флаг игнорируется.
При изменении размера окна Activity может пересоздаться (по умолчанию) или обработать событие в onConfigurationChanged, если в манифесте указаны configChanges="screenSize|smallestScreenSize". Рекомендуется указывать configChanges для ключевых Activity, чтобы избежать потери состояния.
<activity
android:name=".MainActivity"
android:resizeableActivity="true"
android:configChanges="screenSize|smallestScreenSize|orientation" />
Для приложений, которые не поддерживают изменение размера, Android показывает диалоговое окно с предупреждением. В этом случае при переключении в мультиоконный режим система может завершить Activity и показать snackbar с предложением перезапустить.
Multi-Window изменяет стандартный жизненный цикл Activity. Когда другое приложение становится активным в соседнем окне, текущее Activity получает вызов onPause(), но не onStop() — оно остаётся видимым, хотя и не в фокусе. Это важно: видеоплеер должен продолжить воспроизведение на onPause, а не на onStop.
Разработчику нужно различать состояния: onPause + isInMultiWindowMode() = true означает только потерю фокуса, а не уход с экрана. Для видео и анимаций это сигнал не останавливать воспроизведение, а только снять выделение с элементов управления.
При выходе из Multi-Window onMultiWindowModeChanged() вызывается до onResume(). Это даёт возможность перестроить интерфейс под полноэкранный режим до того, как пользователь начнёт взаимодействие.
Первое правило — сохранять состояние. В мультиоконном режиме Activity может быть пересоздана в любой момент. Используйте SavedStateHandle в ViewModel или onSaveInstanceState для всех данных, которые должны сохраняться между изменениями конфигурации.
Второе — тестировать на минимальной ширине 220 dp. Это значение считается самым узким окном в Split Screen. Интерфейс должен оставаться читаемым и функциональным. Если какие-то элементы выходят за границы — используйте Window Size Class для переключения между лейаутами.
Третье — отключать функциональность, которая не работает в Multi-Window. Например, Camera может быть недоступна, если экран слишком мал. Проверяйте isInMultiWindowMode() перед запуском камеры или других полноэкранных функций.
Часто задаваемые вопросы
Установите android:resizeableActivity="false" в манифесте. На Android 12L+ флаг игнорируется для девайсов с большим экраном, поэтому для полного запрета используйте android:maxAspectRatio.
Вызовите isInMultiWindowMode() из Activity. Метод возвращает true, если приложение работает в Split Screen, PiP или Freeform. Также можно подписаться на onMultiWindowModeChanged().
На Android TV доступен только режим Picture-in-Picture. Split Screen и Freeform не поддерживаются — телевизоры используют один главный экран с PiP-окном в углу.
Foreground-сервис продолжает работу независимо от режима. Но если приложение переходит в PiP, система может временно приостановить выполнение для экономии ресурсов.
Android поддерживает Drag and Drop между окнами в Multi-Window через ClipData и View.OnDragListener. Данные передаются через ContentProvider или Intent с FLAG_GRANT_READ_URI_PERMISSION.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также