iPhones.ru

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

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

40 комментариев

Форум →
  1. kiter avatar
    kiter 4 февраля 2008
    0

    Pora brosit eto grjaznoe delo,i podavatsja v pisateli.

    Войди на сайт, чтобы ответить
    Ответить
  2. n1ce avatar
    n1ce 4 февраля 2008
    0

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

    Войди на сайт, чтобы ответить
    Ответить
  3. iBoo avatar
    iBoo 4 февраля 2008
    0

    Крутэмбо =)

    Войди на сайт, чтобы ответить
    Ответить
  4. Borsch avatar
    Borsch 4 февраля 2008
    0

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

    Войди на сайт, чтобы ответить
    Ответить
  5. IgorGul avatar
    IgorGul 4 февраля 2008
    0

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

    Войди на сайт, чтобы ответить
    Ответить
  6. Sample avatar
    Sample 4 февраля 2008
    0

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

    Войди на сайт, чтобы ответить
    Ответить
  7. Sample avatar
    Sample 4 февраля 2008
    0

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

    Войди на сайт, чтобы ответить
    Ответить
  8. Scorpios33 avatar
    Scorpios33 4 февраля 2008
    0

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

    Войди на сайт, чтобы ответить
    Ответить
  9. Maroon avatar
    Maroon 4 февраля 2008
    0

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

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

    Войди на сайт, чтобы ответить
    Ответить
  10. Windland avatar
    Windland 4 февраля 2008
    0

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

    Войди на сайт, чтобы ответить
    Ответить
  11. guran58 avatar
    guran58 4 февраля 2008
    0

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

    Войди на сайт, чтобы ответить
    Ответить
  12. mover avatar
    mover 4 февраля 2008
    0

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

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

    Войди на сайт, чтобы ответить
    Ответить
  13. lXNDR avatar
    lXNDR 4 февраля 2008
    0

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

    Войди на сайт, чтобы ответить
    Ответить
  14. gumoza avatar
    gumoza 4 февраля 2008
    0

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

    Войди на сайт, чтобы ответить
    Ответить
  15. dizeltm avatar
    dizeltm 4 февраля 2008
    0

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

    Войди на сайт, чтобы ответить
    Ответить
  16. IgorGul avatar
    IgorGul 4 февраля 2008
    0

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

    Войди на сайт, чтобы ответить
    Ответить
  17. zarkad avatar
    zarkad 4 февраля 2008
    0

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

    Здорово!

    Войди на сайт, чтобы ответить
    Ответить
  18. slavikus avatar
    slavikus 4 февраля 2008
    0

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

    Войди на сайт, чтобы ответить
    Ответить
  19. IgorGul avatar
    IgorGul 4 февраля 2008
    0

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

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

    Войди на сайт, чтобы ответить
    Ответить
  20. lissa avatar
    lissa 4 февраля 2008
    0

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

    Войди на сайт, чтобы ответить
    Ответить
  21. SeaBreeze avatar
    SeaBreeze 4 февраля 2008
    0

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

    Войди на сайт, чтобы ответить
    Ответить
  22. kolochkov avatar
    kolochkov 4 февраля 2008
    0

    Спасибо!

    Войди на сайт, чтобы ответить
    Ответить
  23. IgorGul avatar
    IgorGul 4 февраля 2008
    0

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

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

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

    Войди на сайт, чтобы ответить
    Ответить
  24. FireStarter avatar
    FireStarter 4 февраля 2008
    0

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

    Войди на сайт, чтобы ответить
    Ответить
  25. IgorGul avatar
    IgorGul 4 февраля 2008
    0

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

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

    Войди на сайт, чтобы ответить
    Ответить
  26. dizeltm avatar
    dizeltm 4 февраля 2008
    0

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

    Войди на сайт, чтобы ответить
    Ответить
  27. lissa avatar
    lissa 4 февраля 2008
    0

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

    Войди на сайт, чтобы ответить
    Ответить
  28. FLOKSY avatar
    FLOKSY 4 февраля 2008
    0

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

    Войди на сайт, чтобы ответить
    Ответить
  29. IgorGul avatar
    IgorGul 4 февраля 2008
    0

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

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

    Войди на сайт, чтобы ответить
    Ответить
  30. lissa avatar
    lissa 4 февраля 2008
    0

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

    Войди на сайт, чтобы ответить
    Ответить
  31. IgorGul avatar
    IgorGul 4 февраля 2008
    0

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

    Войди на сайт, чтобы ответить
    Ответить
  32. SemaginAP avatar
    SemaginAP 4 февраля 2008
    0

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

    Войди на сайт, чтобы ответить
    Ответить
  33. varic avatar
    varic 4 февраля 2008
    0

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

    Войди на сайт, чтобы ответить
    Ответить
  34. lissa avatar
    lissa 4 февраля 2008
    0

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

    Войди на сайт, чтобы ответить
    Ответить
  35. slavikus avatar
    slavikus 4 февраля 2008
    0

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

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

    Войди на сайт, чтобы ответить
    Ответить
  36. IgorGul avatar
    IgorGul 4 февраля 2008
    0

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

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

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

    Войди на сайт, чтобы ответить
    Ответить
  37. ehmelyoff avatar
    ehmelyoff 4 февраля 2008
    0

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

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

    Войди на сайт, чтобы ответить
    Ответить
  38. ehmelyoff avatar
    ehmelyoff 4 февраля 2008
    0

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

    Войди на сайт, чтобы ответить
    Ответить
  39. c0nnstance avatar
    c0nnstance 4 февраля 2008
    0

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

    Войди на сайт, чтобы ответить
    Ответить
  40. aintrust avatar
    aintrust 4 февраля 2008
    0

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

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

    Войди на сайт, чтобы ответить
    Ответить
Помни о правилах — если начал оффтопить, то не удивляйся потом.

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

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