- Многооконный режим: дополнительное конкурентное преимущество для Android-приложений
- Обзор
- Предварительные сведения
- Программная архитектура
- Управление Activity в Lollipop
- Управление окнами в Lollipop
- Проблемы многооконного режима
- Поддержка многооконного режима в Android M
- Пример: Cornerstone
- Итоги
- Разделение экрана Андроид на 2 окна
- Достоинства и недостатки многооконного режима
- Как установить многооконный режим на Андроид
- Пользовательский интерфейс
- С помощью Ярлык Split Screen
Многооконный режим: дополнительное конкурентное преимущество для Android-приложений
Каждый, кто работал в многооконном режиме на Android-устройстве, может подтвердить, что в определенных ситуациях это очень удобно. Простой пример: чтение электронной книги с электронным же словарём. Особенно – на смартфоне или планшете с достаточно большим экраном.
Если пользователю придётся выбирать между двумя приложениями, схожими практически во всём, но различающимися поддержкой одновременной работы с несколькими окнами, неудивительно, что выберет он то, что такую поддержку обеспечивает.
Из статьи вы узнаете о многооконном режиме в Android, и о том, как использовать эту возможность при построении собственных приложений.
Обзор
Одновременная работа с несколькими окнами в Android – это интересная функция, которая способна выделить ваше приложение из множества других, дать ему дополнительное конкурентное преимущество. Многие OEM и ODM-производители, такие, как Samsung, Ramos и Huawei, подвергают базовую систему Android доработке. В частности, они внедряют поддержку многооконного режима. Делают они это для того, чтобы повысить привлекательность своих смартфонов и планшетов, выделить их из основной массы устройств, которые подобную функцию не поддерживают.
Сценарии использования многооконного режима
Предварительные сведения
В июне 2012-го года был представлен Cornerstone – первая платформа с открытым исходным кодом для организации многозадачной работы на Android. В августе 2012-го Samsung выпустила первый аппарат, поддерживающий работу в многооконном режиме. Начиная с 2013-го года и по наши дни, можно наблюдать взрывной рост решений для поддержки одновременной работы с несколькими окнами в Android.
В мае 2015-го года вышла Android M Developer Preview (сегодня, в июле, доступна уже Preview 2). Официальный релиз Android M (6.0) ожидается осенью 2015-го года. Кроме прочих новшеств Android M Preview 2 примечателен тем, что поддерживает многооконный режим.
Развитие решений для поддержки многозадачности в Android
Существуют два подхода к работе с несколькими окнами: это использование плавающих (floating) и закрепленных (docked) окон. Среди основных возможностей работы в многооконных режимах можно отметить открытие и закрытие окон (open/close), изменение их размера (resize) и взаимного расположения (swap). Открывая или закрывая окно, мы, соответственно, включаем или выключаем многооконный режим. Функция изменения размера предусматривает настройку размеров окон. Смена расположения окон – это действие, которое позволяет поменять их местами.
Режимы работы с несколькими окнами
В 2013-м году на рынке появилось множество решений, рассчитанных на работу с несколькими окнами. Они были разработаны OEM и ODM-производителями, независимыми поставщиками ПО и сообществом разработчиков программ с открытым исходным кодом. В таблице ниже вы можете найти сравнение различных технологий организации многооконной работы в среде Android.
Продукт | Cornerstone | Standout | Xposed | Tieto |
Описание | Фреймворк для организации многозадачной работы в ОС Android | Библиотека с открытым исходным кодом, которую можно использовать для создания приложений с плавающими окнами | Многооконное приложение, которое поддерживает закрепленные окна | Проект направлен на создание рабочей среды, напоминающей работу на настольном ПК |
Поддержка открытия, закрытия окон, изменения размера, раскрытия на весь экран | Да | Да | Да | Да |
Стиль окна | Закрепленное | Плавающее | Закрепленное | Закрепленное и плавающее |
Модификация кода | На уровне платформы Android | На уровне приложения | На уровне платформы Android | На уровне платформы Android |
Поддержка приложений | Поддерживаются все приложения, однако, не доступна динамическая настройка SurfaceView. | Некоторые вспомогательные приложения. Например – калькулятор. | Совместимость и стабильность решения нуждается в улучшении. | Поддерживает все приложения. |
Версия Android | Android 4.1. – Android 4.4. | Android 4.1. – Android 4.4. | Android 4.4. | Android 4.4 |
Официальный сайт | Клик | Клик | Клик | Клик |
Программная архитектура
Код платформы Android можно модифицировать для того, чтобы оснастить её поддержкой дополнительных возможностей. Архитектура ОС Android состоит из нескольких уровней.
В случае с Android 4.2 и Android 4.3., оболочка (launcher) и другие приложения при запуске размещаются в одном стеке, называемом «главный стек» («main stack»). Как известно, многооконный режим требует большего количества стеков для размещения в них нескольких окон. В результате, нужно модифицировать системный класс ActivityManagerService, добавив к нему интерфейс для создания стека и управления им. Для модификации класса платформы WIndowManagerService, который позволяет управлять графическими представлениями приложений, требуется изменить InputManager. Нужно это для того, чтобы он мог перенаправлять события касания соответствующим окнам.
С выходом Android 4.4 и Android 5.0 подход к управлению стеком значительно изменился. Оболочка и другие приложения могут запускаться в различных стеках. В систему была добавлена поддержка нескольких стеков и возможность управления ими. На рисунке ниже показаны отличия в работе со стеком в разных версиях Android.
Сравнение работы со стеком в Android 4.3 и Android 4.4
Теперь сосредоточимся на Android 5 (Lollipop). ОС Android использует механизмы обратного вызова для выполнения интерфейсных функций Activity. Однако управляющая функция реализована на уровне платформы. Поэтому сейчас мы рассмотрим два важных класса: ActivityManagerService и WindowManagerService.
Структура ПО платформы Lollipop
Управление Activity в Lollipop
Так как возможность работы в многооконном режиме зависит от стека, ниже показано, как можно создать стек и как можно запустить Activity в этом стеке. В Lollipop в интерфейс IactivityManager.java добавлены следующие функции:
Новые функции интерфейса IactivityManager.java | Описание |
public void moveTaskToStack(int taskId, int stackId, boolean toTop) | Переместить задачу (task) в другой стек |
public void resizeStack(int stackBoxId, Rect bounds) | Изменить размер стека |
public void setFocusedStack(int stackId) | Установить фокус на выбранную задачу |
Public Boolean isInHomeStack(int taskId) | Узнать, находится ли задача в HomeStack |
После запуска процесс SystemServer вызывает службы управления Activity (activity manager services) и окнами (windows management services). Для того чтобы понаблюдать за этим процессом, мы можем добавить в соответствующие места команды вызова исключения времени выполнения (RuntimeException).
Процесс создания стека в Lollipop
Теперь посмотрим, как запустить Activity в стеке:
Запуск Activity в стеке
В Lollipop в утилиту ADB (Android Debug Bridge, отладочный мост Android) были добавлены следующие команды:
Команда ADB | Функция | Описание |
Adb shell am stack start | Запускает новую Activity на , используя Intent | В Kitkat 4.4 команды ADB содержат: adb shell am stack create В Lollipop 5.0: adb shell am stack create deletion |
Adb shell am stack movetask | Перемещает из текущего стека вверх или вниз стека | Использование: adb shell am stack movetask task_id stackid true/false Примечание: в Kitkat это работает, а в Lollipop – нет |
Adb shell am stack resize | Изменяет размер стека и его позицию на | Использование: adb shell am stack resize task_id weight |
Управление окнами в Lollipop
WindowManagerService – это центральная часть системы управления окнами. Его функциональность включает в себя диспетчеризацию событий ввода, управление расположением объектов на экране и поверхностями, на которых выводятся графические элементы.
Роль WindowsManagerService в графической архитектуре Android
Проблемы многооконного режима
Игры, использующие SurfaceFlinger, не могут динамически менять размер окна
Ещё одна проблема заключается в том, что некоторые приложения в многооконном режиме отображаются некорректно. На рисунке ниже вы можете видеть, что калькулятор в многооконном режиме отображается неправильно. Всё дело в макете приложения, который не рассчитан на подобные условия использования.
Калькулятор с макетом, не рассчитанным на работу в многооконном режиме
Поддержка многооконного режима в Android M
Android M Developer Preview 2 можно запустить на Nexus 5, 6, 9 и Nexus Player. Если же подобного устройства у вас нет, или вы не хотите устанавливать на него ОС, находящуюся в статусе Preview, с Android M можно познакомиться с помощью эмулятора в Android Studio. В частности, сейчас нас интересуют стандартные средства для работы в многооконном режиме.
Для того чтобы увидеть этот режим в действии, достаточно создать новое виртуальное устройство с помощью средства AVD Manager, выбрав при этом в качестве системного образа один из доступных с API Level MNC. В нашем случае это был образ x86_64. Далее, надо запустить эмулятор, перейти в раздел настроек Для разработчика и включить там опцию Многооконный режим. Если такой опции найти не удаётся, взгляните на это руководство
Теперь самое интересное. Для начала можно запустить несколько приложений, всё будет как обычно. А вот если нажать на кнопку вызова списка недавно открытых приложений, в заголовках миниатюр окон появится новый значок. По умолчанию это – рамка, указывающая на то, что приложение запускается в полноэкранном режиме. Если на этот значок нажать, появится меню выбора макета расположения окон.
Меню выбора макета расположения окон в многооконном режиме
Дальше всё вполне понятно. Выбираем нужный макет и наслаждаемся многооконным режимом:
Многооконный режим в Android M
Будет ли доступна работа с несколькими окнами в официальном релизе Android M, пока неизвестно. Однако, например, системный калькулятор в этом режиме чувствует себя хорошо. В результате, у нас есть серьёзные основания полагать, что не за горами тот день, когда адаптация приложений для многооконного режима из конкурентного преимущества превратится в насущную необходимость.
Если же вы хотите оснастить свои приложения, рассчитанные на более ранние версии Android, поддержкой нескольких окон, самое время обратиться к решениям сторонних разработчиков, о которых речь шла выше. Например, к Cornerstone.
Пример: Cornerstone
Компания Onskreen создала Cornerstone – первый фреймворк, позволяющий работать с несколькими окнами на Android. Он рассчитан на устройства с большими экранами и планшеты. Исходный код можно загрузить на Github. Он поддерживает работу с Android версий 4.1 и 4.2. Для более поздних версий этой ОС Cornerstone пока не выпущен. Однако можно проанализировать исходный код для Android 4.2 для того, чтобы узнать технические подробности работы системы.
Модификации Cornerstone в Android Jelly Bean
Итоги
Во многих мобильных устройствах, работающих под управлением Android OS, используются процессоры Intel®. Как разработчики могут улучшить ощущения пользователей от работы с их приложениями? Как сделать приложения более конкурентоспособными? Эти вопросы ведут нас к постоянному улучшению продуктов на устройствах с архитектурой Intel Architecture (IA). Поддержка работы в многооконном режиме – это хороший пример полезной возможности, дающей приложениям конкурентные преимущества. Это удобно, многооконный режим даёт пользователю возможность выполнять несколько задач одновременно. Например – смотреть видео и писать друзьям отзыв о том, что смотрит. Например – играть в игру и читать её обзоры. Сегодня работу в многооконном режиме поддерживают несколько устройств. Например – это планшеты Ramos i12, Teclast x98 и Cube i7, который работает под управлением Remix OS.
Многооконный режим на IA-устройствах
Источник
Разделение экрана Андроид на 2 окна
Многооконность в Android разделяет экран, чтобы одновременно использовать 2 приложения. Функция доступна всем пользователям смартфонов на базе Андроид 7.0 Nougat.
Достоинства и недостатки многооконного режима
К плюсам относится расширение многозадачности, когда пользователь может смотреть видео и одновременно общаться в мессенджере, просматривать сайты в браузере и копировать информацию в заметки или подобное.
Интересно! До введения функции в ОС Android официально, она была доступна в фирменных прошивках от Samsung, LG, Huawei/Honor.
Как установить многооконный режим на Андроид
Функцию активируют через :
- пользовательский интерфейс;
- стороннее ПО, активирующее инструменты, встроенные в операционную систему.
Пользовательский интерфейс
Функция встречается в смартфонах от Xiaomi, Samsung, LG и прочих. Для ее активации :
- Запустите софт, который необходимо вывести сверху.
- Откройте окно многозадачности тапнув на квадрат или сделав соответствующий жест. У моделей от Сяоми нажмите на три вертикальных линии.
- Карточку с открытым ПО сдвиньте вниз и выберите «В окне».
- Снизу тапните по программе для запуска во втором окне.
- Регулируйте размер с помощью разграничительной черты.
Обратите внимание! Оба приложения реагируют на тапы и свайпы одновременно. Количество касаний зависит от матрицы установленной в телефоне.
На смартфонах от Xiaomi и Redmi:
- Запустите 2 необходимых проекта.
- Нажмите на «Разделить экран».
- Зажмите палец на софте и перетащите его вверх.
- Выберите вторую программу из запущенных для отображения ее снизу.
Чтобы функция работала для всех приложений, даже в тех, в которых это не предусматривали разработчики:
- В «Настройках» откройте «О телефоне».
- 7 раз тапните по «Версия прошивки», пока не появится сообщение «Теперь вы в режиме для разработчиков».
- Вернитесь в основное меню настроек и перейдите во вкладку «Специальные возможности».
- Выберите «Для разработчиков».
- Опуститесь вниз до категории «Приложения» и активируйте «Изменение размера в многооконном режиме».
Важно! Часть софта будет работать некорректно. Видео будет останавливаться при переключении ко второй программе, тормозить или автоматически закрываться.
С помощью Ярлык Split Screen
Представленное приложение доступно в Play Маркет и работает только на смартфонах на базе Android начиная с 7.0. Чтобы воспользоваться софтом :
- Установите приложение.
- Зайдите в главное меню и нажмите «Разделить экран».
- Пользователя перенесет в окно «Специальные возможности», где необходимо включить «Разделить экран».
- Зажмите кнопку многозадачности, чтобы активировать разделение.
Обратите внимание! Разделение дисплея можно активировать через настройки для разработчиков на девайсах с Android 6.0 Marshmallow, с установленной прошивкой CyanogenMod.
Проект не работает, если :
- в прошивке встроено оконное разделение;
- использовать жесты вместо наэкранных клавиш навигации;
- выбранное ПО не поддерживает одноименный тип отображения.
Многооконный режим на Андроид — удобная функция для работы с несколькими программами, которая встречается в моделях смартфонов от популярных вендоров.
Источник