Распространенные заблуждения о многозадачности iOS

 

Существует один неправильный «совет» по iOS, который я слышу очень часто. Самое плохое, что я продолжаю слышать его от авторитетных источников. Его можно услышать даже от некоторых сотрудников Apple Store.

 

 

Совет этот заключается в следующем: (помните, что он неверный)

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

Неверно. Неверно. Неверно. Все, кто советует так поступать, недостаточно проинформированы и не знают некоторых тонкостей.

Позвольте мне прояснить ситуацию: панель многозадачности в iOS не содержит «список всех запущенных приложений». Это «список недавно использованных приложений». Пользователю никогда не нужно управлять фоновыми задачами на iOS.

За исключением нескольких случаев, о которых я вам расскажу далее, приложения в панели многозадачности в настоящее время не являются запущенными. Когда вы нажимаете на кнопку Home, iOS сообщает приложению выйти. Почти во всех случаях, приложение прекращает использование ресурсов CPU (следовательно и заряда аккумулятора). Если требуется, использованная приложением память мгновенно восстановится.

Давайте рассмотрим это с технической стороны: приложения в iOS имеют пять видов состояния.

  • Not running (не запущенное) — приложение не было запущено или его работа была прекращена
  • Inactive (неактивное) — приложение работает, но не принимает события (например, когда пользователь заблокировал телефон при запущенном приложении)
  • Active (активное) — нормальное состояние приложения при его работе
  • Background (фоновое) — приложение больше не на дисплее, но оно все еще выполняет код
  • Suspended (приостановленное) — приложение занимает память, но не выполняет код

Для нашего разговора состояния Active и Inactive неинтересны. Больше всего неразберихи происходит в тех случаях, когда приложение переходит из состояния Active в Background, затем в Suspended и Not Running.

Когда вы нажимаете кнопку Home, приложение перемещается из Active в Background. В течение следующих нескольких секунд большинство приложений обычно тут же переходят из состояния Background в Suspended.

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

Вы можете подумать, что если приложение затрачивает память, вы можете каким-то образом удалить его и сохранить память. Однако вам не нужно ничего делать, потому что система iOS сделает все за вас. Если вы запустите какую-то большую игру, iOS остановит все Suspended приложения и переместит их в состояние Not running.

Некоторые люди не понимают этого: все вышеперечисленное никак не влияет на то, что вы видите в панели многозадачности. Там всегда отображается список недавно использованных приложений, независимо от их текущего состояния — Background, Suspended или Not Running. Возможно, вы уже обратили внимание, что приложения в режиме Active не отображаются в панели многозадачности.

 

Приложения в фоновом режиме

Обычно многие приложения перемещаются из состояния Background в Suspended в течение нескольких секунд. Приложению может потребоваться дополнительное время на «задачу в фоновом режиме», о чем оно должно сообщить пользователю.

Хороший пример — приложения, которым нужно загружать довольно большие файлы, вроде Instacast. Когда приложение Instacast находится в состоянии Active, может начаться загрузка новых подкастов. Если я нажму кнопку Home на моем iPhone, Instacast получит пять секунд, чтобы переместиться из состояния Background в Suspended. Это остановит загрузку всех подкастов, что могло бы занять 5 минут или больше.

iOS позволяет Instacast сообщить пользователю о том, что загрузка продолжится в фоновом режиме. Это предоставит приложению некоторый временной промежуток работы в фоновом режиме, чтобы закончить загрузку подкаста. Хотя приложения могут запросить дополнительное время, это не будет продолжаться бесконечно долго. Приложение получит около 10 минут работы в фоновом режиме, и затем оно будет принудительно завершено системой iOS. Еще раз, вам не нужно самостоятельно беспокоиться об этом.

 

Неограниченное время работы в фоновом режиме

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

Существует ровно пять видов приложений, которым позволена бесконечная работа в фоновом режиме в iOS 5:

  • Приложения, воспроизводящие аудио в фоновом режиме. Хороший пример — Instacast, воспроизводящий подкаст.
  • Приложения, отслеживающие ваше местоположение в фоновом режиме. Например, вы будете получать голосовые подсказки навигационного приложения TomTom, даже если другое приложение будет в активном режиме.
  • Приложения, работающие со звонками VOIP. Если вы пользуетесь Skype на iOS, вы можете получать звонки в фоновом режиме.
  • Приложения Newsstand, загружающие новый контент.
  • Приложения, получающие непрерывные обновления из внешних источников в фоновом режиме.

Все хорошо написанные приложения из вышеперечисленных категорий должны переходить в состояние Suspended, когда завершается выполнение задачи. Когда программа Instacast заканчивает воспроизведение подкаста, она должна перейти в режим Suspended. Существует некоторые встроенные в систему приложения, которые также могут бесконечно долго работать в фоновом режиме на iOS — вероятно, самым используемым из них является Mail.app.

Во время работы в фоновом режиме приложения потребляют память, мощность CPU и заряд аккумулятора. Однако чаще всего вы будете знать, что в данный момент используются приложения в фоновом режиме. Разработчик обязан сообщить пользователю о работе в фоновом режиме, и часть процесса модерации приложений в App Store заключается в том, чтобы проверять подобные нарушения.

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

 

Выводы

Позвольте мне резюмировать вышесказанное и сделать некоторые выводы.

  1. Если кто-то говорит вам, что приложения в панели многозадачности запущены, используют память и потребляют заряд аккумулятора, они ошибаются.
  2. Когда вы нажимаете кнопку Home, приложение перемещается из состояния Active в Background, затем быстро переходит в режим Suspended и больше не потребляет ресурсы CPU и заряд аккумулятора
  3. Приложение может потребовать дополнительные 10 минут работы в фоновом режиме, чтобы закончить большую задачу.
  4. Если происходит недостаток памяти, iOS автоматически переместит приложения из состояния Suspended в режим Not Running и восстановит память.
  5. Пять видов приложений — аудио, GPS, VOIP, Newsstand и встроенные программы (вроде Mail) могут бесконечно долго работать в фоновом режиме.

Запомните одну простую вещь: вам не нужно управлять фоновыми приложениями на iOS. Практически во всех случаях система сделает это за вас, а хорошо написанные аудио, GPS, VOIP, Newsstand и встроенные приложения сделают это в остальных случаях.
 

Источник: speirs.org, macdays.ru
 

Игнатьев Алексей
Администратор сайта. Главный редактор Max-Review.Ru