Многозадачность в iOS и мифы о ней

2 января (вот же людям не отдыхается) Фрейзер Спейрс (Fraser Speirs) опубликовал интересную заметку о том, как работает многозадачность в операционной системе iOS и разрушил один из популярных мифов среди пользователей iPhone и iPad об “ускорении” работы устройства. Заметка очень полезная, написана простым языком и должна быть понятна всем, поэтому я переведу ее у себя в блоге целиком.
—————–
Есть некий неправильный “совет” для iOS, на который я постоянно натыкаюсь. Что хуже, я слышу его даже от источников, которым можно было бы доверять. Я даже как-то слышал его из уст сотрудника “гений-бара” в Apple Store.
Вот этот совет — и помните, что он не соответствует действительности:

Все эти приложения в панели многозадачности на вашем iOS-устройстве активные и замедляют его, забивая память устройства или используя его батарею. Чтобы улучшить производительность и время работы от батареи, вам нужно удалять вручную эти приложения.

Нет. Нет. Нет. Нет. Нет. Нет. Нет. Нет. Определенные нюансы тут, конечно, есть, но любой, кто дает этот совет, определенно не в курсе ситуации и точно уж не знает об этих нюансах.

Постараюсь сказать максимально понятно: панель многозадачности в iOS не содержит “списка запущенных приложений”. Он содержит “список недавно использованных приложений”. Пользователю не надо управлять фоновыми процессами в iOS.
[ad#intext-inside]
За исключением некоторых случаев, которые я объясню ниже, приложения, которые показываются в панели многозадачности, не работают в данный момент. Когда вы нажимаете на кнопку Home, iOS командует приложению выйти. Практически во всех ситуациях, приложение выходит, оно прекращает использовать ресурсы процессора (а, значит, и батарею), а память, которую оно использовало, со временем освобождается, если надо.
Теперь чуть более технически: у iOS приложений есть пять состояний исполнения. Вот они:

  • Нерабочее — работа приложения была прекращена или оно не было запущено
  • Неактивное — приложение в активном режиме, но не получает событий (например, пользователь заблокировал экран с приложением в рабочем состоянии)
  • Активное — нормальное состояние приложения в режиме использования
  • Фоновое — приложение больше не находится на экране, но по-прежнему исполняет код
  • Приостановленное — приложение по-прежнему находится в памяти, но не исполняет код
  • Активное и неактивное для данной темы неинтересны. Большинство путается в ситуациях, когда приложение переходит из активного в Фоновое, потом в Приостановленное, а потом в Нерабочее.
  • Когда вы нажимаете кнопку Home, приложение переходит из Активного в Фоновое. Большинство приложений затем переходят из Фонового в Приостановленное в течение пары секунд.
    Первый технический нюанс заключается в том, что Приостановленное приложение остается в памяти устройства. Это сделано для того, чтобы оно могло продолжить работу быстрее, если вы к нему вернетесь Оно не использует процессор и батарею.
    Вы можете предположить, что если приложение находится в памяти, вам нужно его как-то удалить оттуда для освобождения памяти. Вам не нужно этого делать, потому что iOS делает это за вас. Если у вас есть Приостановленное приложение и вы запускаете приложение, требовательное к количеству памяти, например, большую игру, iOS начнет удалять Приостановленные приложения и перемещать их в Нерабочее состояние. То есть они полностью будут выгружены из памяти и будут запущены с нуля, когда вы в следующий раз нажмете на их иконку.
    Что путает некоторых людей: все вышеперечисленное никак не влияет на то, что вы видите в панели многозадачности. Панель многозадачности всегда показывает список недавно использованных приложений, невзирая на то, в каком состоянии они находятся. Вы можете также заметить, что приложение, которое Активно в данный момент, не показывается в панели многозадачности.
    Фоновые задачи
    Когда приложение отправляется в Фоновое состояние, оно обычно переходит в Приостановленное состояние через несколько секунд. Приложение может запросить расширение этого периода, заявив, что оно запускает “фоновую задачу”.
    Хороший пример — это приложение, которое загружает большой файл из интернета, например Instacast, моя любимая программа для подкастов. Когда Instacast активна, она может начать загружать новые подкасты. Если я затем нажму на кнопку Home на iPhone, Instacast получит 5 секунд на работу в Фоновом состоянии и затем перейдет в Приостановленное состояние. В этом случае прервется загрузка моих подкастов, которая занимает 5 минут и больше.
    iOS позволяет Instacast заявить, что загрузка — это “фоновая задача”. Это позволяет Instacast получить дополнительный период фоновой работы после нажатия кнопки Home, чтозы завершить загрузку подкастов. Приложение может запросить дополнительное фоновое время, но это время не бесконечно. Приложение получает около 10 минут работы в Фоновом режиме и затем насильно приостанавливается системой. Опять же, по этому поводу вам не стоит беспокоиться.
    Бесконечные Фоновые Процессы
    Все приложения получают 5 секунд работы в фоновом режиме. Некоторые приложения могут запросить расширение этого времени до 10 минут. Есть небольшой набор приложений, которым нужно работать в фоновом режиме постоянно, и iOS разрешает это.
    Есть 5 типов приложений, которым разрешено работать без ограничений в Фоновом состоянии в iOS 5:

  • Приложения, которые проигрывают аудио, находясь в Фоновом состоянии. Хороший пример — тот же Instacast, который воспроизводит подкаст.
  • Приложения, которые отмечают ваше местоположение в Фоновом состоянии. Например, вам нужны голосовые напоминания от навигации TomTom, даже если другое приложение Активно.
  • Приложения, которые “слушают” входящие звонки через VoIP. Если вы используете Skype на iOS, вы можете получить входящий звонок Skype, когда приложение находится в Фоновом состоянии.
  • Приложения Nesstand, которые загружают новый контент.
  • Приложения, которые получают постоянные обновления от внешних аксессуаров, находясь в Фоновом состоянии.
  • Все хорошо написанные приложения в вышеупомянутых категориях должны переходить в Приостановленное состояние, когда они прекращают выполнять свою текущую задачу. Когда Instacast заканчивает проигрывать подкаст, она должна перейти в Приостановленное состояние. Есть некоторые встроенные приложения, которые также постоянно работают в фоновом режиме в iOS — наиболее часто используемым, наверно, является Mail.
    До тех пор, пока эти приложения работают в Фоновом состоянии, они будут потреблять память, ресурсы процессора и батареи. В целом, однако, вы должны знать, что вы используете такие приложения. Разработчик должен уведомить вас, какой вид Фоновой задачи будет исполняться и часть проверки в App Store заключается в том, чтобы проверить, чтобы эти технологии использовались разумно.
    Я говорил раньше, что “пользователю не надо вручную управлять Фоновыми задачами в iOS”. Единственное исключение — это ситуация, когда подобное приложение с работой в фоне начинает безумствовать и не выключается соответствующим образом. Это, однако, является исключительной ситуацией и не относится к нормальной задаче пользователя iOS.
    [ad#intext-inside]
    Резюме
    Давайте я закончу, резюмировав тут все вышесказанное:
    1. Если кто-то говорит вам, что все приложения в панели многозадачности работают, используя память или потребляя энергию батарейки, они неправы.
    2. Когда вы нажимаете кнопку Home, приложение переходит из Активного в Фоновое, а затем быстро — в Приостановленное состояние, когда оно не использует процессор и не потребляет энергию.
    3. Приложение может запросить дополнительные 10 минут работы в фоне, чтобы закончить большую задачу до перехода в Приостановленное состояние.
    4. Если памяти становится мало, iOS автоматически переместит Приостановленные приложения в Нерабочее состояние, и освободит занимаемую ими память.
    5. Пять видов приложений — аудио, GPS, VoIP, Newsstand и приложения для работы аксессуаров — и некоторые встроенные приложения вроде Mail могут работать бесконечно в фоновом режиме, пока не закончат свои задачи.
    Проще говоря: вам не нужно управлять фоновыми задачами в iOS. Система сама управляет практически всеми ситуациями за вас и хорошо написанные аудио, GPS, VoIP, Nesstand и аксессуарные приложения тоже разберутся сами.
    Оригинал