J
[iOS] App's life cycle 본문
앱의 생명주기(Application Life Cycle)는 앱이 실행되고 종료되는 과정에서 다양한 상태로 전환되는 일련의 과정을 의미합니다.
이러한 상태 전환은 시스템 이벤트에 의해 발생하며, 각 상태에 따라 앱이 수행할 수 있는 작업이 달라집니다.
앱의 상태(App State)
- Not Running
- 앱이 실행되지 않았거나 완전히 종료된 상태입니다.
- Foreground - Inactive
- 앱이 실행 중이지만 사용자 이벤트를 받을 수 없는 상태입니다.
- 멀티태스킹 창에 진입하거나 전화, 알림 등의 인터럽트로 인해 이 상태로 전환될 수 있습니다.
- Foreground - Active
- 앱이 실행 중이며 사용자와 상호작용할 수 있는 상태입니다.
- 일반적으로 Inactive 상태를 거쳐 이 상태로 전환됩니다.
- Background - Running
- 앱이 화면에서 보이지 않지만 실행 중인 상태입니다.
- 예를 들어, 음악 앱이 백그라운드에서 계속 재생되는 경우가 이에 해당합니다.
- 이 상태에서는 서버와 데이터 동기화, 타이머 실행 등의 작업을 수행할 수 있습니다.
- Background - Suspended
- 앱이 메모리에 유지되지만 실행 중이지 않은 상태입니다.
- 메모리 부족 시 시스템에 의해 종료될 수 있으며, 다시 실행될 때 처음부터 시작될 수 있습니다.
iOS 12 및 이전 버전의 생명주기 관리
iOS 12 및 이전 버전에서는 UIApplicationDelegate를 통해 앱의 생명주기를 관리합니다.
application(_:didFinishLaunchingWithOptions:)
: 앱이 실행된 후 초기 설정을 완료한 뒤 호출됩니다.applicationDidBecomeActive(_:)
: 앱이 Active 상태로 전환될 때 호출됩니다.applicationWillResignActive(_:)
: 앱이 Inactive 상태로 전환되기 직전에 호출됩니다.applicationDidEnterBackground(_:)
: 앱이 Background 상태로 전환될 때 호출됩니다.applicationWillEnterForeground(_:)
: 앱이 Foreground로 전환되기 직전에 호출됩니다.applicationWillTerminate(_:)
: 앱이 종료되기 직전에 호출됩니다.
iOS 13 및 이후 버전의 생명주기 관리
iOS 13부터는 멀티 윈도우 지원을 위한 Scene 개념이 도입되었습니다.
각 Scene은 독립적인 생명주기를 가지며, UISceneDelegate를 통해 관리됩니다.
scene(_:willConnectTo:options:)
: 새로운 Scene이 연결될 때 호출됩니다.sceneDidBecomeActive(_:)
: Scene이 Active 상태로 전환될 때 호출됩니다.sceneWillResignActive(_:)
: Scene이 Inactive 상태로 전환되기 직전에 호출됩니다.sceneDidEnterBackground(_:)
: Scene이 Background 상태로 전환될 때 호출됩니다.sceneWillEnterForeground(_:)
: Scene이 Foreground로 전환되기 직전에 호출됩니다.sceneDidDisconnect(_:)
: Scene의 연결이 해제될 때 호출됩니다.
상태 전환 시 처리해야 할 작업
각 상태 전환 시 다음과 같은 작업을 수행하는 것이 좋습니다.
- Active 상태 진입 시: UI를 업데이트하고 사용자와의 상호작용을 준비합니다.
- Inactive 상태 진입 시: 현재 작업을 저장하고, 필요한 경우 실행 중인 작업을 일시 중지합니다.
- Background 상태 진입 시: 중요한 데이터를 저장하고, 불필요한 리소스를 해제하여 메모리를 확보합니다.
- Foreground 상태 진입 시: 백그라운드에서 변경된 내용을 반영하고 UI를 최신 상태로 유지합니다.
- 앱 종료 시: 모든 작업을 중지하고 필요한 데이터를 저장하여 다음 실행 시 복원할 수 있도록 합니다.
참고: https://developer.apple.com/documentation/uikit/managing-your-app-s-life-cycle
'iOS' 카테고리의 다른 글
[iOS] Debuggging, LLDB (0) | 2024.11.12 |
---|---|
[iOS] Debugging, Breakpoint (0) | 2024.08.26 |
[iOS] App SandBox (0) | 2024.08.20 |