iOS Application Lifecycle, или жизненный цикл iOS приложения
Жизненный цикл ios приложения — обширная и сложная тема. Но как всегда для наших читателей в этой статье будет изложено максимально понятное и наглядное описание процесса жизненного цикла iOS предложения.
Можно в поисковике набрать 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
Thanks for the good explanation with examples!
+