Закрыть объявление

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

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

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

Тип среды выполнения приложения

Приложение на вашем устройстве iOS находится в одном из следующих 5 состояний:

  • Бег: приложение запускается и работает на переднем плане
  • Фон: он все еще работает, но работает в фоновом режиме (мы можем использовать другие приложения)
  • Приостановленный: Все еще использует ОЗУ, но не работает
  • Неактивный: приложение запущено, но косвенные команды (например, при блокировке устройства при работающем приложении)
  • Не бегать: Приложение завершилось или не запустилось

Путаница возникает, когда приложение уходит в фоновый режим, чтобы не беспокоить. Когда вы нажимаете кнопку «Домой» или используете жест для закрытия приложения (iPad), приложение переходит в фоновый режим. Большинство приложений приостанавливаются в течение нескольких секунд (они хранятся в оперативной памяти iDevice, поэтому их можно быстро запустить, они не так сильно нагружают процессор и, таким образом, экономят заряд батареи). Вы можете подумать, что если приложение продолжает использовать память, у вас есть вручную удалить его, чтобы освободить. Но вам не обязательно этого делать, потому что iOS сделает это за вас. Если у вас в фоновом режиме приостановлено требовательное приложение, например игра, использующая большой объем оперативной памяти, iOS при необходимости автоматически удалит его из памяти, и вы сможете перезапустить его, коснувшись значка приложения.

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

Фоновые задачи

Обычно, когда вы нажимаете кнопку «Домой», приложение запускается в фоновом режиме, и если вы его не используете, оно автоматически приостанавливается в течение пяти секунд. Например, если вы загружаете подкаст, система оценивает его как работающее приложение и задерживает завершение на десять минут. Самое позднее через десять минут процесс удаляется из памяти. Короче говоря, вам не нужно беспокоиться о прерывании загрузки нажатием кнопки «Домой», если ее завершение не займет более 10 минут.

Бесконечный бег в фоновом режиме

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

  • Приложения, которые воспроизводят звук и которые необходимо на время прерывать (ставить музыку на паузу во время телефонного звонка и т.п.),
  • Приложения, отслеживающие ваше местоположение (навигационное программное обеспечение),
  • Приложения, принимающие вызовы VoIP. Например, если вы используете Skype, вы можете принять вызов, даже когда приложение находится в фоновом режиме.
  • Автоматические загрузки (например, газетный киоск).

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

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

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

Таким образом, в целом вам не нужно управлять фоновыми процессами, поскольку система позаботится о них сама. Вот почему iOS — такая свежая и быстрая система.

С точки зрения разработчика

Приложение может реагировать в шести различных состояниях в рамках многозадачности:

1. ПриложениеWillResignActive

В переводе это состояние означает, что приложение перестанет быть активным (то есть приложением на переднем плане) в будущем (вопрос нескольких миллисекунд). Такое происходит, например, при поступлении вызова во время использования приложения, но в то же время этот метод также вызывает это состояние до того, как приложение перейдет в фоновый режим, поэтому необходимо учитывать эти изменения. Этот метод также подходит для того, чтобы, например, приостанавливать все выполняемые действия при входящем вызове и ждать окончания вызова.

2. ПриложениеDidEnterBackground

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

3. ПриложениеWillEnterForeground

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

4. ПриложениеDidBecomeActive

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

5. ПриложениеWillTerminate

Это состояние возникает за несколько миллисекунд до выхода приложения, то есть до того, как приложение фактически завершится. Либо вручную из многозадачности, либо при выключении устройства. Этот метод следует использовать для сохранения обработанных данных, завершения всех действий и удаления данных, которые больше не понадобятся.

6. ПриложениеDidReceiveMemoryWarning

Именно последнее состояние является наиболее обсуждаемым. Он отвечает за при необходимости удаление приложения из памяти iOS, если оно без надобности использует системные ресурсы. Я не знаю конкретно, что iOS делает с фоновыми приложениями, но если ей нужно приложение для освобождения ресурсов другим процессам, она выводит предупреждение о необходимости освободить все имеющиеся у нее ресурсы. Итак, этот метод вызывается в приложении. Разработчики должны реализовать это так, чтобы приложение отдавало выделенную им память, сохраняло все происходящее, очищало ненужные данные из памяти и в остальном адекватно освобождало память. Это правда, что многие разработчики, даже новички, не думают о таких вещах и не понимают их, и тогда может случиться так, что их приложение угрожает сроку службы батареи и/или излишне потребляет системные ресурсы, даже в фоновом режиме.

вердикт

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

Источник: macworld.com

Авторы: Якуб Пожарек, Мартин Доубек (ArnieX)

 
У вас тоже есть проблема, которую нужно решить? Вам нужен совет или возможно найти подходящее применение? Не стесняйтесь обращаться к нам через форму в разделе Консультирование, в следующий раз мы ответим на ваш вопрос.

.