생명주기 상태
iOS 12 이하에서의 앱 생명주기 내용을 정리하고자 한다.
먼저, iOS 앱의 생명주기에는 5가지 단계가 존재한다.
Not Running, Inactive, Active, Background, Suspended
Not Running
단어 그대로 현재 앱이 실행되어 있지 않은 상태이다. ( 메모리에 존재 X )
Inactive
앱이 실행은 되어 있지만, 특정한 상황에 의해 ( 멀티태스킹 윈도우로 이동, 전화가 오거나 알람이 실행 )
실질적으로 사용자가 앱과 상호작용이 불가한 상태이다.
Active
앱이 실행되어 현재 사용자의 이벤트를 받을 수 있는 상태이다.
Background
홈 화면으로 진입하거나, 다른 앱을 실행하여 실질적으로 앱이 동작하지 않는 상태이다.
앱과 서버와의 데이터 동기화, 파일 다운로드, 타이머 동작 등의 작업 수행이 가능하다.
Suspended
Background 상태에서 별다른 작업이 없는 경우, 이 상태로 전환된다.
앱의 마지막 작업을 빠르게 다시 로드하기 위하여, 메모리에 관련된 데이터만 저장되어 있는 상태이다.
생명주기와 관련된 AppDelegate 메서드
application:willFinishLaunchingWithOptions: (Not Running -> Inactive)
앱의 실행이 준비되며 실행되는 메서드입니다.
메인 스토리보드나 nib 파일이 로드 된 후에 호출이 되지만, 이 메서드가 호출될 때의 앱의 상태는 Inactive 입니다.
application:didFinishLaunchingWithOptions: (Not Running -> Inactive)
앱 초기화를 완료하고 실행되기 전 마지막으로 설정을 준비하는 메서드입니다.
이 메서드가 실행된 이후 시스템에서는 Foreground 또는 Background 로 앱의 상태를 전환합니다.
applicationDidBecomeActive: (Inactive -> Active)
Inactive 상태에서 Active 상태로 전환될 때 호출되는 메서드입니다.
앱 실행 또는 Inactive 상태로 만드는 작업을(수신 전화, 알람 등) 사용자가 중단하여 다시 Active 상태로 앱이 전환될 때 호출됩니다.
applicationWillResignActive: (Active -> Inactive)
Active 상태에서 Inactive 상태로 전환될 때 호출되는 메서드입니다.
이때 실행중이던 작업들을 일시 중지 시켜야 합니다.
applicationDidEnterBackground: (Inactive -> Background)
앱이 Background 상태로 전환될 때 호출되는 메서드입니다.
applicationWillEnterForeground: (Background -> Inactive)
앱이 Background 에서 Active 상태로 전환될 때 호출되는 메서드입니다.
Background 로 전환될 때 적용했던 변경사항들을 이 메서드에서 취소할 수 있습니다.
applicationWillTerminate: (Not Running)
앱이 종료되고 메모리에서 해제되기 전 호출되는 메서드입니다.
앱이 Background 상태를 지원하지 않거나, iOS 3.X 이전 버전에서는 항상 호출됩니다.
Background 상태로 진입시에는 호출되지 않지만, 시스템에서 모종의 이유로 앱을 종료해야 할 때 호출 될 수 있습니다.
혹시나 설명에 잘못 된 부분들이 있다면 댓글 남겨주시면 감사하겠습니다.