앱의 라이프 사이클
애플리케이션 자체의 생명주기라는 것은 총 5가지 상태를 갖는다.
그리고 그 5가지 상태는 꽤나 직관적으로 이해하기 쉬운 것들이다.
Not Running
첫 번째는 Not Running 상태로,
의미는 앱이 아직 실행되지 않은 상태. 또는 완전히 종료되어 동작하지 않는 상태. 이다.
Foreground - Inactive
두 번째는 Inactive 상태이다.
app이 실행중이더라도 사용자와 상호작용할 수 없는 상태를 말한다.
multitasking window에서 사용자가 다른 앱을 사용하고 있거나 app 실행 중 전화 등의 이유로 app을 사용할 수 없는 경우가 이에 해당한다.
Foreground - active
앱을 켜서 사용중인 상태이다.
참고로 앱이 실행되면 app은 Not running -> foreground-Inactive -> foreground-active
의 과정을 거친다.
Background - Running
앱을 실행했다가 홈 버튼을 눌러서 나온 경우나 다른 앱으로 전환한 경우 background 상태에 있다고 함.
이 때 음악 앱처럼 백그라운드에서도 계속 동작하는 경우 background - running 상태에 있다고 한다.
Background - Suspended
앱은 background 상태에 진입했을 때 다른 작업을 하지 않으면 Suspended 상태로 진입한다.
이 상태에서 os는 앱을 다시 실행했을 때 빠르게 로드할 수 있게 관련 데이터만 메모리에 올려놓는다.
만약 메모리가 부족해진다면 os는 이들 앱부터 메모리에서 해제한다.
추가로 알아둘만한 점
iOS13 이상부터는 UI Life Cycle은 Scene Delegate
가, Process Life Cycle은 App Delegate
가 관리한다.
이전에는 둘을 합쳐 UIApplicationDelegate
에서 관리했다고.
앱의 라이프 사이클과 관련된 함수들
앱 실행 시
앱이 실행될 때 앱은 Not running 상태에서 바로 foreground - Active 상태가 되는 것이 아니라,
Not Running -> Inactive -> Active
의 과정을 거친다.
이와 관련된 함수는
application(_:didFinishLaunchingWithOptions:)
앱이 실행되고 앱을 화면에 띄우기 위한 모든 설정이 완료된 뒤에 호출된다. Storyboard를 사용한다면 storyboard에서 entry point를 찾아 내부적으로 UIWindow를 생성한다. 코드로 Window를 생성한다면 해당 함수 안에서 생성한다.applicationDidBecomeActive(_:)
앱이 Inactive에서 Active 상태로 전환되는 경우 호출된다.
앱이 백그라운드로 갈 때
앱 실행 중 홈 버튼을 눌러서 백그라운드로 가게 되는 상황에서는 다음과 같은 과정을 거친다.
Active -> Inactive -> Background (-> Background-suspended)
.
이런 과정을 거치면서 앱은 다음 메서드를 호출하게 된다.
applicationWillResignActive(_:)
앱이 Active->Inactive로 갈 때 호출.
applicationDidEnterBackground(_:)
앱이 Background 상태로 전환되었을 때 호출된다.
백그라운드에서 포어그라운드(Background to Foreground)로 올 때
이 경우에도 Inactive 상태를 거침.
Background -> foreground-Inactive -> foreground-Active
처럼.
이 과정에서는 다음 메서드가 호출된다:
applicationWillEnterForeground(_:)
앱이 Background에서 Inactive로 전환될 때
applicationDidBecomeActive(_:)
앱이 Inactive에서 Active 상태로 전환될 때
앱 종료시
앱이 어떤 과정을 거쳐서 종료가 되든 다음의 메서드를 호출한다:
applicationWillTerminate(_:)
시스템이 오류로 종료될 때에는 호출되지 않는다!
앱 라이프 사이클에 따른 Scene 기준 메서드들은 아래 블로그 참조
https://velog.io/@rnfxl92/%EC%95%B1-%EC%83%9D%EB%AA%85%EC%A3%BC%EA%B8%B0-Application-Life-Cycle
'iOS::스위프트(swift) > just swift' 카테고리의 다른 글
swift 로딩 중 표시하기 (0) | 2021.09.23 |
---|---|
Swift URLSession GET/POST (0) | 2021.07.09 |
iOS/Swift 푸시 알림 원리 (0) | 2021.05.11 |
Swift/iOS MapKit 으로 지도에 이동 기록 나타내기(with LocalDB Realm) (1) | 2021.05.07 |
Swift/iOS Naver API 받아 써보기(feat. Nmapsmap 오류 해결) (0) | 2021.05.03 |
최근댓글