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

slavikus avatar | 40
FavoriteLoading В закладки

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

horovod.jpg

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

Для начала — небольшая справка. Как известно, в телефоне — ограниченный объём оперативной памяти, доступной приложениям. Несмотря на то, что система — 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)

1 Звезд2 Звезды3 Звезды4 Звезды5 Звезд (Проголосуйте первым за статью!)
undefined
iPhones.ru
«И вот я выбрал Installer.app, и начал грузить обновления сорцов, и тут мне каааак приспичит почитать башорг! А выйти-то никак — система не реагирует сразу на нажатие кнопки Home. Прошлый век какой-то! Уж могли бы сделать систему многозадачной!» © Форум iPhones.ru Я, конечно, не смог остаться равнодушным, и решил немножко рассказать, что и как на самом деле. Для начала — небольшая справка. Как известно, в телефоне — ограниченный объём оперативной памяти, доступной приложениям....
Прокомментировать

🙈 Комментарии 40

  1. kiter avatar
    kiter4 февраля 2008
    0

    Pora brosit eto grjaznoe delo,i podavatsja v pisateli.

  2. n1ce avatar
    n1ce4 февраля 2008
    0

    ТАЛАНТ!!! читал с удовольствием!

  3. iBoo avatar
    iBoo4 февраля 2008
    0

    Крутэмбо =)

  4. Borsch avatar
    Borsch4 февраля 2008
    0

    к чему?
    непоняяяятно…

  5. IgorGul avatar
    IgorGul4 февраля 2008
    0

    не понял про Safari )))
    т.е. если выгрузить Сафари полностью, то при новом заходе я должен оказаться на странице с “Закладками”…
    Но при выходе из сафари (удержание кнопки Home более 6-ти секунд и вываливании SpringBoard) и последующем заходе открывантся последняя страница

  6. Sample avatar
    Sample4 февраля 2008
    0

    Как-то не очень логично это устроено, получается если программе “дозарезу” нужно оставаться в памяти, она все-равно будет выгружена. Единственное оправдание этому, пока SDK не вышел apple это не волнует. =) Кстати, если программа запущена не из spirgboard-а, то на кнопку home она не реагирует, убить программу можно только лишь kill-ом или закрыв терминал из которого она была запущена. (но & всегда спасает от последнего =) )

  7. Sample avatar
    Sample4 февраля 2008
    0

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

  8. Scorpios33 avatar
    Scorpios334 февраля 2008
    0

    А вы оставьте все на усмотрение ОСи и просто понимайте что происходит. К большому сожалению вместо” работы над ошибками” которых от версии к версии прибавляется, Эппл больше уделяет времени борьбе с пользователем и хакером, которые дружны. И похоже это стало навязчивой идеей как одной так и другой стороны…..;-) Поэтому особенно на СДКей не полагайтесь как на решение всех проблем. Их только прибавиться.

  9. Maroon avatar
    Maroon4 февраля 2008
    0

    Ого… с таким талантом к изложения вам надо книгу про iPhone написать)

    P.S. В Маках меня первое время (после PC) удивляло то, что когда нажимаешь на крестик что бы закрыть программу она уходит в фоновый режим (в закладки), а не закрывается полностью, а что бы закрыть ее нужно нажать на яблочко и “Выйти”. Ох уж этот странный Мак))

  10. Windland avatar
    Windland4 февраля 2008
    0

    Славикус! Ещё!

  11. guran58 avatar
    guran584 февраля 2008
    0

    Отлично написано!!

  12. mover avatar
    mover4 февраля 2008
    0

    Работать без swap-раздела, на мой взгляд, не здорово. Совершенно очевидно, что он нужен. И почему не использовать часть той 8-гиговой флэшки, что внутри?

    А как посмотреть приложения в памяти с их размерами? Что-нибудь вроде top’а есть?

  13. lXNDR avatar
    lXNDR4 февраля 2008
    0

    Но вопрос все-же остается: если память не исчерпана (ну, вот повезло) и в ней трепыхается две программки – контакты, к примеру, и записки (notes), то есть ли возможность (принципиальная) не вываливаясь в интерфейс SpringBoard переключиться между приложениями?

  14. gumoza avatar
    gumoza4 февраля 2008
    0

    Славикус – отлично написано :)
    Всегда рад тебя почитать… как новая книжка про фандорина :)

  15. dizeltm avatar
    dizeltm4 февраля 2008
    0

    slavikus! А Вы не знаете, что происходит, когда телефон выходит из спящего режима по нажатию хоум (ну или слип/вейкап)?

  16. IgorGul avatar
    IgorGul4 февраля 2008
    0

    так все таки, кто объяснит пост выше …
    ============
    не понял про Safari )))
    т.е. если выгрузить Сафари полностью, то при новом заходе я должен оказаться на странице с “Закладками”…
    Но при выходе из сафари (удержание кнопки Home более 6-ти секунд и вываливании SpringBoard) и последующем заходе открывантся последняя страница

  17. zarkad avatar
    zarkad4 февраля 2008
    0

    Талантливые люди работают в RIPDEVе.
    1. Талант программиста
    2. Талант писателя.

    Здорово!

  18. slavikus avatar
    slavikus4 февраля 2008
    0

    Safari запоминает адреса открытых страниц для того, чтобы, если его завершит SpringBoard по причине недостатка памяти, при запуске все равно показать то, что просматривал пользователь.

  19. IgorGul avatar
    IgorGul4 февраля 2008
    0

    по тексту выше…..
    ========
    ….А вот с Safari ситуация интереснее. При выходе из него Safari смотрит, есть ли у вас открытые или загружающиеся страницы. Если их нет, то программа завершается полностью, и при следующем нажатии на иконку запустится «начисто» (это легко определить, если после старта программы вы видите окошко с Bookmarks). Если же открытые страницы есть, Safari переходит в suspended режим, где и ждёт дальнейшего развития событий….
    =========
    я далее писал………
    не понял про Safari )))
    т.е. если выгрузить Сафари полностью, то при новом заходе я должен оказаться на странице с “Закладками”…
    Но при выходе из сафари (удержание кнопки Home более 6-ти секунд и вываливании SpringBoard) и последующем заходе открывантся последняя страница

    ЗЫ у меня такого не получилось (я про Закладки)

  20. lissa avatar
    lissa4 февраля 2008
    0

    IgorGul, у Вас должны быть закрыты ВСЕ страницы в Сафари, я так понимаю. Если они закрыты, “то программа завершается полностью, и при следующем нажатии на иконку запустится «начисто».

  21. SeaBreeze avatar
    SeaBreeze4 февраля 2008
    0

    Дополнение: чтобы насильно “убить” любое приложение, надо на 6 сек нажать HOME и ждать, пока не появится рабочий стол.

  22. kolochkov avatar
    kolochkov4 февраля 2008
    0

    Спасибо!

  23. IgorGul avatar
    IgorGul4 февраля 2008
    0

    lissa вообще-то одна страница всегда у меня открыта (нет кнопки ее закрыть)
    при переходе на Закладки а потом закрытии Сафари картина таже самая

    SeaBreeze я писал что “насильно” закрываю Сафари
    …….Но при выходе из сафари (удержание кнопки Home более 6-ти секунд и вываливании SpringBoard) и последующем заходе открывантся последняя страница……

    Но вот при открытии Сафари я вхожу в Закладки, как написано выше по тексту (((

  24. FireStarter avatar
    FireStarter4 февраля 2008
    0

    я тоже не понял как в сафари закрыть ВСЕ страницы.

  25. IgorGul avatar
    IgorGul4 февраля 2008
    0

    оЧеПятка в предыдущем посте

    Но вот при открытии Сафари я вхожу в Закладки, как написано выше по тексту (((
    ….надо читать НЕ вхожу в Закладки…

  26. dizeltm avatar
    dizeltm4 февраля 2008
    0

    slavikus!!!
    Если есть информация, что твориться в телефоне при выходе из режима слип, отпишитесь, пожалуйста!
    Очень нужна информация!!!

  27. lissa avatar
    lissa4 февраля 2008
    0

    IgorGul, я попадаю в закладки, если ранее выхожу из Сафари с пустой страницы.

  28. FLOKSY avatar
    FLOKSY4 февраля 2008
    0

    теперь стало чуточку яснее…

  29. IgorGul avatar
    IgorGul4 февраля 2008
    0

    lissa я попадаю в закладки, если ранее выхожу из Сафари с пустой страницы.

    везЕт, а как сделать страницу пустой, если было что то загружено и нельзя закрыть страницу последнюю??

  30. lissa avatar
    lissa4 февраля 2008
    0

    Создаешь новую пустую (самая правая кнопка внизу) и закрываешь старую :)- опять нажимаешь на ту же кнопку и выбираешь страницу, которую хочешь закрыть.

  31. IgorGul avatar
    IgorGul4 февраля 2008
    0

    ))) т.е. что бы закрыть Сафари я должен
    1. создать сначала “пустую страницу”
    2. Выбрать из загруженных страниц “не пустую”
    3. Закрыть “не пустую”
    4. Нажать на Номе и удерживать 6 сек
    5. надоест быстро

  32. SemaginAP avatar
    SemaginAP4 февраля 2008
    0

    Прикольно, не знал о такой фиче! Открываешь Сафари, он секундочку ждет и снизу выдвигает страничку с закладками!

  33. varic avatar
    varic4 февраля 2008
    0

    Отлично написал!

  34. lissa avatar
    lissa4 февраля 2008
    0

    IgorGul, я не знаю, для чего тебе это нужно :) Ты спросил – я ответила. Я просто выхожу :)

  35. slavikus avatar
    slavikus4 февраля 2008
    0

    dizeltm: в личку мне на форуме: http://www.iphones.ru/forum/index.php?act=Msg&CODE=4&MID=414

    Igor: а зачем это всё, и правда? =)) Для принудительного завершения достаточно подержать Home 6 секунд. А вообще – ну висит себе в памяти и висит, есть не просит… =)

  36. IgorGul avatar
    IgorGul4 февраля 2008
    0

    ну ладно, ладно, не нападайте :)

    я просто решил проверить фразу …это легко определить, если после старта программы вы видите окошко с Bookmarks

    а у меня получился облом, вот я и пытался разобраться…

  37. ehmelyoff avatar
    ehmelyoff4 февраля 2008
    0

    IgorGul: как ни странно, но помоему тока я тебя понял)
    Когда я в первый раз услышал про Home и 6 секунд, то почему-то полез проверить на сафари… и оно не сработало)

    На самом деле все просто, при помощи Home и 6 сек закрываешь первый раз, заходишь заново, и пытаешься таким же способом закрыть второй раз. И после этого открыв ты увидишь bookmarks :)

  38. ehmelyoff avatar
    ehmelyoff4 февраля 2008
    0

    К предыдущему посту…
    Кстати непонятно почему именно так. Мне конечно все равно как оно там, но все же инетересно :)

  39. c0nnstance avatar
    c0nnstance4 февраля 2008
    0

    Респект автору. Молодец.
    Просто о сложном, так, что и простым смертным становится доступно.
    Еще раз спасибо.
    С нетерпением жду очередной статьи.

  40. aintrust avatar
    aintrust4 февраля 2008
    0

    > В стандартной поставке таких приложений всего три — Phone (MobilePhone), iPod (MobileMusicPlayer) и Safari (MobileSafari).

    А разве MobileMail не входит в этот “скорбный” список?

Вы должны авторизоваться или зарегистрироваться для комментирования.

Нашли орфографическую ошибку в новости?

Выделите ее мышью и нажмите Ctrl+Enter.

Как установить аватар в комментариях?

Ответ вот здесь