Хороводом вокруг ёлки

«И вот я выбрал Installer.app, и начал грузить обновления сорцов, и тут мне каааак приспичит почитать башорг! А выйти-то никак — система не реагирует сразу на нажатие кнопки Home. Прошлый век какой-то! Уж могли бы сделать систему многозадачной!»

Я, конечно, не смог остаться равнодушным, и решил немножко рассказать, что и как на самом деле.

Для начала — небольшая справка. Как известно, в телефоне — ограниченный объём оперативной памяти, доступной приложениям. Несмотря на то, что система — OS X, и имеет общие корни с Mac OS X, понятие виртуальной памяти (это когда при нехватке памяти выделяется часть диска под оперативную память) в ней отключено. Соответственно телефон имеет доступ только к реальной физической оперативке. А её чуть меньше 100 мегабайт на всё про всё.

Все программы с графическим интерфейсом в iPhone (ну и, конечно, в iPod touch) запускаются из SpringBoard. Это та самая программа, которая показывает иконки приложений и lock screen. Она же следит за объёмом свободной памяти и, при необходимости, принимает меры.

Что же происходит при нажатии на кнопку Home (круглая кнопка внизу, возвращающая в SpringBoard)? Текущему процессу предлагают уйти в «suspended mode» — и, если оно хочет, оно может просто «уступить» место другому приложению, оставаясь загруженным в память — только интерфейс его будет спрятан. В стандартной поставке таких приложений всего три — Phone (MobilePhone), iPod (MobileMusicPlayer) и Safari (MobileSafari). Рассмотрим их поподробнее.

Phone всегда принудительно висит в памяти — оно и понятно — ведь, чтобы позвонить, вам не захочется каждый раз ждать загрузки приложения (а стартует оно довольно медленно, так как подгружает списки контактов, историю звонков и т.д.). Поэтому при старте SpringBoard она запускает в фоновом режиме и Phone.app — это можно заметить, если сразу после перезагрузки или перезапуска SpringBoard попробовать войти в Телефон — оно покажется не моментально, а через 1-2 секунды, когда программа догрузится.

iPod (внутреннее название — MobileMusicPlayer) висит в памяти только во время воспроизведения музыки. Однажды запустившись, оно продолжает быть запущенным до тех пор, пока её по каким-то причинам не завершит SpringBoard (об этом ниже).

А вот с Safari ситуация интереснее. При выходе из него Safari смотрит, есть ли у вас открытые или загружающиеся страницы. Если их нет, то программа завершается полностью, и при следующем нажатии на иконку запустится «начисто» (это легко определить, если после старта программы вы видите окошко с Bookmarks). Если же открытые страницы есть, Safari переходит в suspended режим, где и ждёт дальнейшего развития событий.

Я уже упоминал о том, что SpringBoard следит за объёмом свободной памяти. Поскольку, например, Safari кушает последнюю большими ложками, может случится так, что оперативная память будет подходить к концу. В таких случаях SpringBoard поступает так, как и положено хорошему хозяину в доме — смотрит, какие из приложений работают в suspended mode, и, буде таковые найдутся, посылает им команду на «самоубийство». Программа, получив такую инструкцию, должна сохранить своё состояние и освободить помещение. Если она не хочет или не может это сделать за определенное время (порядка 5 секунд), она убивается принудительно. Таким образом, в системе существует эффективный механизм контроля за распределением памяти.

Читайте также  App Store Open Valve

Именно поэтому большинство программ выгружаются полностью при нажатии на кнопку Home — во-первых, время запуска достаточно небольшое, а во-вторых, совершенно незачем занимать собой драгоценную память, если тобой в данный момент никто не пользуется. Есть исключения — например, Apollo, которая висит в памяти постоянно, дабы оставаться онлайн. Но и к ней применяются те же меры, что и для всех остальных программ — если системе покажется, что свободной памяти маловато, процесс Apollo, мирно сидящий на заднем плане, будет безжалостно убит.

Такая вот непростая жизнь у приложений внутри iPhone — когда всё хорошо, они водят хороводы вокруг ёлки (SpringBoard), когда всё становится чуть напряжней, ёлка ненавязчиво падает на самого незаметного из них — чтобы Дед Мороз, если ему вдруг захочется появиться на этом празднике жизни, не был удивлён тем, что хоровод бродит еле-еле, спотыкаясь и падая.

Не будем расстраивать дедушку, да?

Источник: iphones.ru

Лучшее для себя