Для любознательных: обновление UI и мультиоконный
режим
До версии Android 7.0 Nougat большинство activity очень мало
времени проводило в приостановленном состоянии. Это
состояние было лишь промежуточным между состоянием
выполнения и остановки. Из-за этого многие разработчики
предполагали, что обновлять интерфейс нужно только тогда,
когда activity находится в возобновленном состоянии. Обычной
практикой было использование функций
onResume()
и
onPause()
для запуска или остановки любых текущих
обновлений, связанных с пользовательским интерфейсом
(таких как анимация или обновление данных).
Когда в версии Nougat был введен многооконный режим, это
нарушило принцип, гласящий, что на экране видна только
выполняемая activity. А это, в свою очередь, сломало
предполагаемое поведение многих приложений. Теперь, когда
пользователь
находится
в
многооконном
режиме,
приостановленные activity могут быть полностью видны в
течение
длительного
периода
времени.
Разумеется,
пользователь ожидает, что эти приостановленные activity будут
вести себя так, как если бы они выполнялись.
Простой пример — видео. Предположим, у вас есть
приложение
pre-Nougat,
предназначенное
для
воспроизведения видео. Вы запускаете (или возобновляете)
воспроизведение
видео
в
функции
onResume()
и
приостанавливаете в
onPause()
. И вот появляется
многооконный режим, но ваше приложение останавливает
воспроизведение при переключении пользователя на
приложение во втором окне. Пользователи недовольны, ведь
они хотят смотреть видео, пока пишут сообщение в отдельном
окне.
К счастью, исправить это просто: нужно переместить ваше
возобновление воспроизведения и паузу в функции
onStart()
и
onStop()
. Это относится к любым данным, обновляемым в
реальном времени, например фотогалереям, которые
прокручивают фотографии, когда они попадают в поток Flickr
(как вы увидите позже в этой книге).
С момента появления Nougat ваша activity должна обновлять
пользовательский интерфейс на протяжении всего видимого
жизненного цикла, от
onStart()
до
onStop()
.
К сожалению, не все усвоили этот урок, и многие
приложения до сих пор некорректно работают в многооконном
режиме. Чтобы исправить это, команда разработчиков Android
в ноябре 2018 года представила спецификацию для поддержки
мультивозобновления в многооконном режиме. Этот режим
означает, что полностью видимая activity в каждом из окон
будет находиться в состоянии выполнения, когда устройство
находится в многооконном режиме, независимо от того, с
каким из окон пользователь взаимодействует в данный момент.
Вы можете использовать многооконный режим для своего
приложения, когда оно работает на Android 9.0 Pie, добавив
метаданные
в
манифест
Android:
dataandroid:name="android.allow_multiple_resumed_a
ctivities"android:value="true"/>
. Вы узнаете об этом
больше в главе 6.
Стоит отметить, что мультивозобновление будет работать
только на тех устройствах, производитель которых реализовал
соответствующую спецификацию. И на момент написания этой
статьи ни одно устройство на рынке так не умеет. Однако ходят
слухи, что спецификация станет обязательной в следующей
версии Android Q.
Пока мультивозобновление не станет легкодоступным
стандартом для большинства устройств на рынке, вам придется
использовать ваши знания о жизненном цикле activity, чтобы
понимать, где разместить код обновления пользовательского
интерфейса. По мере изучения этой книги мы будем много
практиковаться в этом.
Do'stlaringiz bilan baham: |