Архивы: по дате | по разделам | по авторам

В чём секрет многозадачности iOS4

АрхивМнения
автор : Андрей Письменный   22.06.2010

Программы для iPhone оказались не готовы к выходу новой версии ОС - большинство из них не поддерживает быстрое переключение задач.

У обладателей айфонов и плееров iPod Touch наступил небольшой, но весёлый праздник – день обновления операционной системы. Ритуал, связанный с ним, прост: телефон или плеер положено подключить к компьютеру, найти в iTunes кнопку "check for updates", скачать что-то около трёхсот мегабайт и с затаённым дыханием ждать, пока устройство перезагрузится.

Чем же способна нас порадовать обновлённая ОС? О большинстве нововведений глава Apple Стив Джобс говорил на презентации iOS 4 в апреле 2010 года, затем с новыми подробностями – на июньской WWDC 2010. Основное нововведение – это, конечно, то, что Джобс назвал "многозадачностью", а на самом деле – хитроумный механизм, при помощи которого при переходе из приложения в приложение операционная система продолжает выполнять лишь необходимые задачи, а состояние программы замораживает.

Ввод нововведений неравномерен – не все уже выпущенные телефоны получили новые функции. "Многозадачность", к примеру, доступна лишь начиная с iPhone 3GS и iPod touch третьего поколения, а iPhone 3G и соответствующее поколение "тача" одарено лишь менее значительными новинками: возможностью создавать папки для группирования приложений, функцией смены фонового рисунка на главном экране и прочими мелочами.

Но даже обладатели последних моделей iPhone и iPod touch, скорее всего, окажутся неприятно удивлены после установки обновления. Дело в том, что разрекламированный способ переключаться между приложениями пока что работает вовсе не так, как было показано. Во время демонстрации Стив Джобс показывал, что в любой момент (даже если мы играем в какую-нибудь игру) можно два раза нажать на кнопку "домой" и увидеть список последних запущенных программ. Выбираем любую из них и она моментально возникает перед нами. Проделываем трюк ещё раз, выбрав игру, и продолжаем играть с того же места. Магия!

Но провернуть всё это самому просто-напросто невозможно. Вернувшись в игру пользователь обнаружит, что та запускается точно так же, как запускалась раньше, и вместо того чтобы начать работать с того самого момента, на котором была остановлена, может отобразить стартовое меню. Если, конечно, ранее игра не вела себя по-другому – некоторые разработчики научились самостоятельно заботиться о сохранении и восстановлении состояния своих программ.

Так в чём же дело? Почему даже после обновления на iOS 4 программы продолжают вести себя по-прежнему, а меню для переключения между задачами больше напоминает обыкновенный список последних запущенных приложений? Ответ на этот вопрос становится понятен после знакомства с принципом местной "многозадачности". Вместо того, чтобы позволять приложениям выполняться параллельно, операционная система разрешает приложениям запускать лишь некоторые специальные процессы, которые могут выполняться в фоне. Это может быть, к примеру, воспроизведение музыки, загрузка файла на сервер или недолгое действие, выполняемое перед завершением.

В какой-то мере это похоже на кооперативную многозадачность, применявшуюся во времена Windows. 3.1 и классической Mac OS. Этот тип многозадачности подразумевает, что программы исполняются друг за другом в порядке перехода фокуса от одной к другой и самостоятельно заботятся о передаче управления. Покупка компании Nextstep (и повторный найм Стива Джобса на роль исполнительного директора) позволили Apple создать Mac OS X, использующую привычную по современным компьютерам вытесняющую многозадачность.

Увы, вытесняющая многозадачность не очень-то подходит для портативных устройств – её использование грозит излишним энергопотреблением, нагрузкой на центральный процессор и замусоривание флэш-памяти файлами подкачки. К вытесняющей многозадачности приходится добавлять разные ухищрения, позволяющие системе решать, какие приложения менее важны в данный момент, и автоматически понижать приоритет их выполнения.

Похожие уловки применяются в операционной системе Google Android. Она постепенно понижает приоритет неиспользуемой программы, а затем замораживает её состояние. О случаях, когда этого происходить не должно, автор программы должен позаботиться самостоятельно.

В случае iPhone OS разработчик должен заботиться и о сохранении состояния и о его восстановлении. Просто с выходом iOS 4 это делать стало проще, чем раньше, благодаря специальным API. Сложно сказать, почему Стив Джобс обошёл вниманием этот тонкий вопрос. Вероятно, он хотел сосредоточить внимание публики на потенциальных возможностях, а не на проблемах разработчиков. Однако в итоге вышло, что новая ОС работает не так, как ожидалось.

В будущем эта неясность ведёт к ещё более плачевным последствиям. Приложения, уже умеющие сохранять своё состояние и приложения, разработчики которых не поторопятся поддержать новую функцию, будут так или иначе сосуществовать в App Store – хотя бы потому, что некоторые программы просто заброшены и больше не обновляются. Получается, что пользователь не может быть уверен в том, как очередная программа среагирует на закрытие и повторное открытие – сбросится или будет восстановлена с того же места, где её оставили.

Почему нельзя было с самого начала подумать о предотвращении такой ситуации? Заморозка состояния программ работала ещё в старинной Palm OS, причём так, что поддержка была сразу и во всех приложениях. У пользователя никогда не было сомнений в сохранности данных.

Однако если попытаться представить себе, что бы вышло, сделай Apple то же самое, что в своё время было сделано в Palm, то эппловское решение окажется куда более гибким и дальновидным. Дело в том, что Palm OS хоть и сохраняла состояние программ, но не было никакой возможности запустить фоновый процесс - ни для музыки, ни для завершения работы. Если во времена первых Palm сохранять данные могло понадобиться только локально, то теперь программа может захотеть в последний момент загрузить что-то в интернет - к примеру, мессенджер сможет выставить табличку "отошёл", когда пользователь переключится в другую программу.

Хорошо было бы, реализуй Apple такую функцию с самого начала или хотя бы её часть – заморозку состояния. Но такого решения, увы, принято не было. Возможно – по каким-то техническим причинам: местная многозадачность появилась именно с новым поколением устройств, а у них больше оперативной памяти и более мощный процессор. iPhone 3G тем временем еле-еле справляется и с теми приложениями (почтой, браузером и т.п.), которые работали в фоне изначально. Так или иначе, лучше поздно, чем никогда.

© ООО "Компьютерра-Онлайн", 1997-2019
При цитировании и использовании любых материалов ссылка на "Компьютерру" обязательна.