Войти

Или войди с помощью

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

slavikus avatar |

«И вот я выбрал 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)

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

Войди и оставь комментарий

Или войди с помощью

<- Назад Забыли пароль? Войти
  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

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

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

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

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