Распространенные заблуждения о многозадачности 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». Единственное исключение бывает в тех случаях, когда приложение прекращает свою работу не должным образом. Однако это происходит довольно редко.
Выводы
Позвольте мне резюмировать вышесказанное и сделать некоторые выводы.
- Если кто-то говорит вам, что приложения в панели многозадачности запущены, используют память и потребляют заряд аккумулятора, они ошибаются.
- Когда вы нажимаете кнопку Home, приложение перемещается из состояния Active в Background, затем быстро переходит в режим Suspended и больше не потребляет ресурсы CPU и заряд аккумулятора
- Приложение может потребовать дополнительные 10 минут работы в фоновом режиме, чтобы закончить большую задачу.
- Если происходит недостаток памяти, iOS автоматически переместит приложения из состояния Suspended в режим Not Running и восстановит память.
- Пять видов приложений — аудио, GPS, VOIP, Newsstand и встроенные программы (вроде Mail) могут бесконечно долго работать в фоновом режиме.
Запомните одну простую вещь: вам не нужно управлять фоновыми приложениями на iOS. Практически во всех случаях система сделает это за вас, а хорошо написанные аудио, GPS, VOIP, Newsstand и встроенные приложения сделают это в остальных случаях.
via speirs.org
распространённое заблуждение – считать что они реально не висят в памяти, реально не замедляют работу устройства. они там есть, и немножко-да, но они работают
Я тоже следовал этому заблуждению до этого поста. Но теперь отучаю себя убивать приложения, хотя бы ради эксперимента. Такое чувство, что наоборот батарея стала лучше работать :)
Только не пойму, если, скажем, Скайп работает в фоне, я продолжаю получать уведомления от него, но влияет ли это на батарею или нет?
Да, об этом написано в статье. «Во время работы в фоновом режиме приложения потребляют память, мощность CPU и заряд аккумулятора»
11