iOS App Life Cycle 에 대해 이해하고자 번역한 글입니다. (출처)
앱이 포어그라운드나 백그라운드에 있을 때 시스템 알림에 응답하고 다른 중요한 시스템 관련 이벤트를 다룬다.
앱의 현재 상태에 따라 할 수 있는 것과 할 수 없는 것이 결정된다. 예를들어, 포어그라운드 앱은 사용자의 관심을 끌기 때문에 이것은 CPU를 포함한 시스템 리소스보다 우선 순위가 높다.
반대로, 백그라운드 앱은 offscreen이기 때문에 가능한한 적은 작업을 수행해야 하고, 되도록 아무것도 수행하지 않아야 한다. 앱의 상태가 변경될 때 그에 따라 적절한 동작을 적용해야 한다.
앱 상태가 변경될 때 UIKit은 적절한 델리게이트 객체의 메소드를 호출해 알려준다.
UISceneDelegate
scene 기반 앱에서 라이프 사이클 이벤트에 응답하기 위해 객체를 사용한다UIApplicationDelegate
객체를 사용한다 Note
앱에서 scene support를 활성화하면 iOS는 iOS 13 이후 버전에서는 항상 scene delegate를 사용한다. iOS 12 이전 버전에서는 시스템이 app delegate를 사용한다
여러 앱을 띄워놓은 상황
앱이 scene을 지원하면, UIKit은 각각에 대해 별도의 라이프 사이클 이벤트를 전달한다. Scene은 기기에서 실행되는 앱 UI의 한 인스턴스를 나타낸다. 유저는 각각의 앱에 대해 여러개의 화면을 만들 수 있고 개별적으로 표시하거나 숨길 수도 있다. 왜냐하면 각각의 scene은 자신만의 라이프사이클이 있기 때문에 다 다른 실행 상태에 있을 수 있다. 예를 들어 한 scene이 포어그라운드에 있는동안 다른것들은 백그라운드에 있거나 중단되어있을 수 있다.
Important
Scene 서포트는 opt-in 기능이다. 기본 지원을 활성화 하려면 Info.plist파일에 Specifying the Scenes Your App Supports에 설명된대로UIApplicationSceneManifest
키를 추가하면 된다.
아래 그림은 Scene의 상태 전환을 보여준다. 유저나 시스템이 앱에 새로운 씬을 요청할 때, UIKit은 그것을 생성해 연결되지 않은 상태로 만든다.
유저 요청 화면은 재빠르게 foreground로 이동해 화면에 나타난다.
시스템 요청 화면은 일반적으로 이벤트를 처리할 수 있도록 background로 이동한다.
예를 들어, 시스템이 위치 이벤트를 처리하기 위해 백그라운드에서 화면을 시작한다고 하자. 사용자가 앱의 UI를 닫을 때, UIKit은 관련된 씬을 백그라운드로, 결국 중단된 상태로 이동시킨다. UIKit은 언제든지 백그라운드나 중단된 씬과의 연결을 끊어 리소스를 회수해 해당 씬을 연결되지 않은 상태로 되돌릴 수 있다.
아래의 작업을 수행하기 위해 장면 전환(scene transitions)을 사용하면 된다
한 앱을 띄워놓은 상황
iOS 12와 이전 버전 및 Scene을 지원하지 않는 앱에서 UIKit은 모든 라이프 사이클 이벤트를 UIApplicationDelegate
객체로 보낸다.
앱 델리게이트는 별도의 화면에 표시된 창을 포함해 앱의 모든 창(windows)를 관리한다. 결과적으로 앱 상태 전환(app state transitions)은 외부 디스플레이의 컨텐츠를 포함해 전체 UI에 영향을 준다.
아래 그림은 앱 델리게이트 객체와 관련된 상태 전환을 보여준다. 실행 후, 시스템은 UI가 화면에 표시될지 여부에 따라 앱을 inactive나 background 상태로 둔다. foreground로 시작할 때 시스템은 자동으로 앱을 active상태로 전환한다. 그 후, 앱이 종료될때까지 state는 active와 background 사이에서 변동한다.
아래의 작업을 수행할때 앱 전환을 사용하라
라이프 사이클 이벤트를 다루는 것 외에도 앱은 아래 표에 있는 것들을 다루기 위해 준비해야 한다. 대부분의 이벤트를 다루기 위해 UIApplicationDelegate
를 사용한다. 어떤 경우에선 알림을 사용해 앱의 다른 부분에서 응답하도록 허락할 수 있다.
NSUserActivity
객체를 처리해야 할 때 수신됨