iOS Application Lifecycle, или жизненный цикл iOS приложения

Жизненный цикл ios приложения — обширная и сложная тема. Но как всегда для наших читателей в этой статье будет изложено максимально понятное и наглядное описание процесса жизненного цикла iOS предложения.

AplicationLifeCycle_proSwift_ru

Можно в поисковике набрать iOS Application Lifecycle и вы увидите много диаграмм (сложных и не очень), в которых разобраться без пол-литра не получится. Также будет и рисунок, который представлен выше. Эта диаграмма взята их лекций Stanford University, посвященных разработке iOS приложений, но тут она переведена на русский язык.

Давайте разбираться что, зачем и почему…

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

Обработка событий из различных этапов жизненного цикла iOS приложений очень похожа на обработку событий жизненного цикла View Controller. Т.е. нужно понимать в какой момент какой метод вызывается и что в этот момент времени уже «проинициализировалось», — с чем мы можем в данный момент работать.

Сначала приложение не запущенно. Потом пользователь запускает приложение. Оно переходит в состояние в состояние Foreground, в котором приложение становится сначала Iactive —  на этом этапе выполняется код программы, но не обрабатываются события интерфейса пользователя (интерфейс не отображается, касания не обрабатываются и.т.п.). Затем переходит в этап Active, в котором выполняется код и обрабатываются все события UI.

Если пользователь запустит другое приложение, то текущее приложение перейдет в состояние Inactive и затем в состояние Background. В этом состоянии коды выполняется ограниченное время, и не обрабатываются события UI. Нужно понимать, что именно в этом состоянии можно заставить приложения получить, допустим, из интернета самые свежие обновления чего либо, и дать их приложению, что бы когда пользователь вернул приложение в Foreground он мог увидеть эту информацию.

После весьма короткого состояния Background  приложение переходит в состояние Suspended. В этом состоянии код не выполняется вовсе и система может убить приложение для освобождения памяти, если оно потребуется.

Теперь о методах AppDelegate, которые вызываются во время работы приложения и перехода из одного состояния в другое.

Успешный запуск приложения

Вызывается метод:

//
// proSwift.ru
//
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.
    return true
}

Также происходит оповещение с именем

UIApplicationDidFinishLaunchingNotification

На схеме это стрелка №1

Переключение на другое приложение или нажатие копки «Home».

Обычно на этом этапе приостанавливаются какие-то задачи или ставится на паузу игра. В этом месте мы ставим «на паузу» пользовательский интерфейс.

Вызывается метод:

//
// proSwift.ru
//

func applicationWillResignActive(application: UIApplication) {
    
}

Также происходит оповещение с именем

UIApplicationWillResignActiveNotification

На схеме это стрелка №3

Приложение перешло в состояние Active

Вызывается метод

//
// proSwift.ru
//

func applicationDidBecomeActive(application: UIApplication) {
        
}

Также происходит оповещение с именем

UIApplicationDidBecomeActiveNotification

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

На схеме это стрелка №2

Переход в состояние Background

Вызывается метод:

//
// proSwift.ru
//

func applicationDidEnterBackground(application: UIApplication) {

}

Также происходит оповещение с именем

UIApplicationDidEnterBackgroundNotification

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

На схеме это стрелка №5

Переход из Background в состояние Foreground

Вызывается метод

//
// proSwift.ru
//
func applicationWillEnterForeground(application: UIApplication) {

}

Также происходит оповещение с именем

UIApplicationWillEnterForegroundNotification

В этом состояние можно сменить все изменения, сделанные в состоянии Background.

На схеме это стрелка №4

Пользователь закрывает приложение

Вызывается метод:

//
// proSwift.ru
//
func applicationWillTerminate(application: UIApplication) {

}

Также происходит оповещение с именем

UIApplicationWillTerminateNotification

2 Comments on “iOS Application Lifecycle, или жизненный цикл iOS приложения

Добавить комментарий для Anastasia Отменить ответ

Ваш адрес email не будет опубликован.

*

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.