«И вот я выбрал Installer.app, и начал грузить обновления сорцов, и тут мне каааак приспичит почитать башорг! А выйти-то никак система не реагирует сразу на нажатие кнопки Home. Прошлый век какой-то! Уж могли бы сделать систему многозадачной!» © Форум iPhones.ru
Я, конечно, не смог остаться равнодушным, и решил немножко рассказать, что и как на самом деле.
Для начала небольшая справка. Как известно, в телефоне ограниченный объём оперативной памяти, доступной приложениям. Несмотря на то, что система 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 секунд), она убивается принудительно. Таким образом, в системе существует эффективный механизм контроля за распределением памяти.
Именно поэтому большинство программ выгружаются полностью при нажатии на кнопку Home во-первых, время запуска достаточно небольшое, а во-вторых, совершенно незачем занимать собой драгоценную память, если тобой в данный момент никто не пользуется. Есть исключения например, Apollo, которая висит в памяти постоянно, дабы оставаться онлайн. Но и к ней применяются те же меры, что и для всех остальных программ если системе покажется, что свободной памяти маловато, процесс Apollo, мирно сидящий на заднем плане, будет безжалостно убит.
Такая вот непростая жизнь у приложений внутри iPhone когда всё хорошо, они водят хороводы вокруг ёлки (SpringBoard), когда всё становится чуть напряжней, ёлка ненавязчиво падает на самого незаметного из них чтобы Дед Мороз, если ему вдруг захочется появиться на этом празднике жизни, не был удивлён тем, что хоровод бродит еле-еле, спотыкаясь и падая.
Не будем расстраивать дедушку, да?
Слава Карпенко (RiP Dev)
40 комментариев
Форум →Pora brosit eto grjaznoe delo,i podavatsja v pisateli.
ТАЛАНТ!!! читал с удовольствием!
Крутэмбо =)
к чему?
непоняяяятно…
не понял про Safari )))
т.е. если выгрузить Сафари полностью, то при новом заходе я должен оказаться на странице с “Закладками”…
Но при выходе из сафари (удержание кнопки Home более 6-ти секунд и вываливании SpringBoard) и последующем заходе открывантся последняя страница
Как-то не очень логично это устроено, получается если программе “дозарезу” нужно оставаться в памяти, она все-равно будет выгружена. Единственное оправдание этому, пока SDK не вышел apple это не волнует. =) Кстати, если программа запущена не из spirgboard-а, то на кнопку home она не реагирует, убить программу можно только лишь kill-ом или закрыв терминал из которого она была запущена. (но & всегда спасает от последнего =) )
…хотя наверное тогда лучше написать даемон, а обертку уже вызывать через spiringbord.
А вы оставьте все на усмотрение ОСи и просто понимайте что происходит. К большому сожалению вместо” работы над ошибками” которых от версии к версии прибавляется, Эппл больше уделяет времени борьбе с пользователем и хакером, которые дружны. И похоже это стало навязчивой идеей как одной так и другой стороны…..;-) Поэтому особенно на СДКей не полагайтесь как на решение всех проблем. Их только прибавиться.
Ого… с таким талантом к изложения вам надо книгу про iPhone написать)
P.S. В Маках меня первое время (после PC) удивляло то, что когда нажимаешь на крестик что бы закрыть программу она уходит в фоновый режим (в закладки), а не закрывается полностью, а что бы закрыть ее нужно нажать на яблочко и “Выйти”. Ох уж этот странный Мак))
Славикус! Ещё!
Отлично написано!!
Работать без swap-раздела, на мой взгляд, не здорово. Совершенно очевидно, что он нужен. И почему не использовать часть той 8-гиговой флэшки, что внутри?
А как посмотреть приложения в памяти с их размерами? Что-нибудь вроде top’а есть?
Но вопрос все-же остается: если память не исчерпана (ну, вот повезло) и в ней трепыхается две программки – контакты, к примеру, и записки (notes), то есть ли возможность (принципиальная) не вываливаясь в интерфейс SpringBoard переключиться между приложениями?
Славикус – отлично написано :)
Всегда рад тебя почитать… как новая книжка про фандорина :)
slavikus! А Вы не знаете, что происходит, когда телефон выходит из спящего режима по нажатию хоум (ну или слип/вейкап)?
так все таки, кто объяснит пост выше …
============
не понял про Safari )))
т.е. если выгрузить Сафари полностью, то при новом заходе я должен оказаться на странице с “Закладками”…
Но при выходе из сафари (удержание кнопки Home более 6-ти секунд и вываливании SpringBoard) и последующем заходе открывантся последняя страница
Талантливые люди работают в RIPDEVе.
1. Талант программиста
2. Талант писателя.
Здорово!
Safari запоминает адреса открытых страниц для того, чтобы, если его завершит SpringBoard по причине недостатка памяти, при запуске все равно показать то, что просматривал пользователь.
по тексту выше…..
========
….А вот с Safari ситуация интереснее. При выходе из него Safari смотрит, есть ли у вас открытые или загружающиеся страницы. Если их нет, то программа завершается полностью, и при следующем нажатии на иконку запустится «начисто» (это легко определить, если после старта программы вы видите окошко с Bookmarks). Если же открытые страницы есть, Safari переходит в suspended режим, где и ждёт дальнейшего развития событий….
=========
я далее писал………
не понял про Safari )))
т.е. если выгрузить Сафари полностью, то при новом заходе я должен оказаться на странице с “Закладками”…
Но при выходе из сафари (удержание кнопки Home более 6-ти секунд и вываливании SpringBoard) и последующем заходе открывантся последняя страница
ЗЫ у меня такого не получилось (я про Закладки)
IgorGul, у Вас должны быть закрыты ВСЕ страницы в Сафари, я так понимаю. Если они закрыты, “то программа завершается полностью, и при следующем нажатии на иконку запустится «начисто».
Дополнение: чтобы насильно “убить” любое приложение, надо на 6 сек нажать HOME и ждать, пока не появится рабочий стол.
Спасибо!
lissa вообще-то одна страница всегда у меня открыта (нет кнопки ее закрыть)
при переходе на Закладки а потом закрытии Сафари картина таже самая
SeaBreeze я писал что “насильно” закрываю Сафари
…….Но при выходе из сафари (удержание кнопки Home более 6-ти секунд и вываливании SpringBoard) и последующем заходе открывантся последняя страница……
Но вот при открытии Сафари я вхожу в Закладки, как написано выше по тексту (((
я тоже не понял как в сафари закрыть ВСЕ страницы.
оЧеПятка в предыдущем посте
Но вот при открытии Сафари я вхожу в Закладки, как написано выше по тексту (((
….надо читать НЕ вхожу в Закладки…
slavikus!!!
Если есть информация, что твориться в телефоне при выходе из режима слип, отпишитесь, пожалуйста!
Очень нужна информация!!!
IgorGul, я попадаю в закладки, если ранее выхожу из Сафари с пустой страницы.
теперь стало чуточку яснее…
lissa я попадаю в закладки, если ранее выхожу из Сафари с пустой страницы.
везЕт, а как сделать страницу пустой, если было что то загружено и нельзя закрыть страницу последнюю??
Создаешь новую пустую (самая правая кнопка внизу) и закрываешь старую :)- опять нажимаешь на ту же кнопку и выбираешь страницу, которую хочешь закрыть.
))) т.е. что бы закрыть Сафари я должен
1. создать сначала “пустую страницу”
2. Выбрать из загруженных страниц “не пустую”
3. Закрыть “не пустую”
4. Нажать на Номе и удерживать 6 сек
5. надоест быстро
Прикольно, не знал о такой фиче! Открываешь Сафари, он секундочку ждет и снизу выдвигает страничку с закладками!
Отлично написал!
IgorGul, я не знаю, для чего тебе это нужно :) Ты спросил – я ответила. Я просто выхожу :)
dizeltm: в личку мне на форуме: http://www.iphones.ru/forum/index.php?act=Msg&CODE=4&MID=414
Igor: а зачем это всё, и правда? =)) Для принудительного завершения достаточно подержать Home 6 секунд. А вообще – ну висит себе в памяти и висит, есть не просит… =)
ну ладно, ладно, не нападайте :)
я просто решил проверить фразу …это легко определить, если после старта программы вы видите окошко с Bookmarks
а у меня получился облом, вот я и пытался разобраться…
IgorGul: как ни странно, но помоему тока я тебя понял)
Когда я в первый раз услышал про Home и 6 секунд, то почему-то полез проверить на сафари… и оно не сработало)
На самом деле все просто, при помощи Home и 6 сек закрываешь первый раз, заходишь заново, и пытаешься таким же способом закрыть второй раз. И после этого открыв ты увидишь bookmarks :)
К предыдущему посту…
Кстати непонятно почему именно так. Мне конечно все равно как оно там, но все же инетересно :)
Респект автору. Молодец.
Просто о сложном, так, что и простым смертным становится доступно.
Еще раз спасибо.
С нетерпением жду очередной статьи.
> В стандартной поставке таких приложений всего три — Phone (MobilePhone), iPod (MobileMusicPlayer) и Safari (MobileSafari).
А разве MobileMail не входит в этот “скорбный” список?
Нашли орфографическую ошибку в новости?
Выделите ее мышью и нажмите Ctrl+Enter.Что означает ошибка «Профиль приложения больше не доступен» в iOS
Что делать, если потерял Apple Pencil. Как искать стилус Apple при помощи приложения на iPhone или iPad
Как познакомить Siri со своими родственниками
Как менять циферблаты Apple Watch автоматически по времени суток
Что случится с подпиской iCloud при переходе на Apple One
Что делать, если не заряжаются AirPods
Как управлять Apple TV 4 с iPhone или iPad
Почему iPhone издает странный звук во время работы