앱의 상태 변화
Not running(Unattached): 앱이 실행되지 않았거나 시스템에서 종료됨
-> application(_willFinishLaunchingWithOptions:)
앱 실행을 준비하는 메소드
-> applicationDidFinishLaunching(_:)
주로 초기화 코드
-> applicationWIllTerminate(_:)
앱이 종료되기 직전에 호출
Foreground:
In-Active: 앱이 Foreground에서 실행중이지만, 이벤트를 받을 수 없음 > 이 상태에 잠시 머물다가 다른 상태로 전이됨
-> sceneWillEnterForeground(_:)
앱이 백그라운드나 낫러닝에서 포어그라운드로 들어가기 직전에 호출된다.
Active: 앱이 화면에 떠 있을 때의 상태 > 이벤트를 받을 수 있음
-> sceneWillResignActive(_:)
앱이 비활성상태에서 활성상태로 진입하고 난 직후
Background: 앱이 백그라운드에서 코드를 실행중. 대부분의 앱은 일시중지 상태로 잠시 이 상태가 된다. 그러나 추가 시간을 요청하는 앱은 일정기간 동안 이 상태로 남아있을 수 있다. 또한 백그라운드로 직접 실행되는 앱은 비활성 상태 대신 이 상태로 전환된다
sceneDidEnterBackground(_:)
앱이 백그라운드 상태로 들어갔을 때Suspended: 앱이 백그라운드에 있지만 코드를 실행하지 않음. 시스템은 앱을 자동으로 이 상태로 이동시키고 그렇게 하기 전에 앱에 알리지 않는다. 일시 중지 된 앱은 메모리에 남아는 있지만 코드는 실행되지 않는다. 메모리 부족상태가 발생하면 시스템은 예고없이 일시 중단 된 앱을 제거하여 메모리를 확보한다.
사용자나 시스템이 새로운 scene을 만들어달라고 요청하면, UIKit는 이를 만들어 unattached 상태로 만든다. 사용자가 요청한 scene은 곧장 Foreground inactive 상태를 거쳐 active 상태가 되고, 시스템이 요청한 scene은 보통 Background 상태가 되어 이벤트를 처리한 뒤에 Foreground로 올라온다. 사용자가 앱의 UI를 닫게 되면, 해당하는 scene은 UIKit에 의해 Background 상태로 갔다가 Suspended 상태가 된다. UIKit는 언제든지 이 Background나 Suspended 상태인 scene을 회수해 unattached 상태로 되돌려 놓을 수 있다.
앱의 라이프사이클은 앱을 터치해서 실행시키고 완전히 종료되기 까지 아래 단계로 요약 해볼 수 있다.
사용자의 동작에 따라 앱의 상태가 변경된다.
메소드 순서로 보면
낫 러닝 상태에서 앱 실행하고 포어그라운드 직전에 applicationDidFinishLaunching(_:) 이 호출되고
이제 포어그라운드에 진입할 때 sceneWillEnterForeground(_:) 가 호출되면서 인액티브 상태가 된다.
또한 유저가 백그라운드에 진입했을때 sceneDidEnterBackground(_:) 가 호출되고
다시 포어그라운드에 들어가게 될 때 sceneDidBecomeActive(_:) 이 호출되는데 여기서 인액티브 상태를 거쳐가게 된다.
가장 흔한 예시는 우리가 문자를 공유하기 하려할 때 카카오톡 앱이 실행되는데, 이때 메시지 앱은 In-Active 상태가 되어진다.