Life style/TIL
iOS 앱의 생명주기(App Life Cycle)
jaewpark
2024. 6. 5. 00:11
앱의 현재 상태에 따라 언제든지 할 수 있는 것과 할 수 없는 것이 결정된다.
앱이 상태가 변경됨에 따라 그에 따라 동작을 조정해야 한다.
iOS 13이상에서는 UISceneDelegate
개체를 사용하여 scene-based app의 수명 주기 이벤트에 응답한다. 1
앱이 Scene을 지원하는 경우 UIKit은 각각에 대한 별도의 수명 주기 이벤트를 제공한다.
Scene은 기기에서 실행되는 앱 UI의 한 인스턴스를 나타낸다.
UIApplicationSceneManifest
를 추가하면 앱이 Scene 기반으로 작동하도록 설정된다. 이를 통해 멀티태스킹을 지원하고 여러 창을 동시에 열어서 작업할 수 있게 된다. Opt-in feature
로 기본적으로는 단일 윈도우를 가지고 Scene 기반의 생명 주기 관리가 비활성화된다.
Scene의 상태 전환
- 사용자 또는 시스템이 앱에 대한 새로운 Scene을 요청하면 UIkit은 이를 만들고
Unattached
로 전환 - 사용자가 요청한 장면은
Foreground 활성화
하여 화면에 표현 - 시스템 요청 Scene은 일반적으로 이벤트를 처리할 수 있도록
Background
로 이동 - 사용자가 앱의 UI를 해제하면 UIkit은 연결된 Scene을
Background
로 이동하고Suspended
로 전환 - UIkit은 언제든지
Background
또는Suspended
연결을 끊어 리소스를 회수하여 해당 Scene을 연결 해지 가능
앱의 상태에 따라 할 수 있는 작업들
- Not Running: 앱이 실행되고 있지 않은 상태
- Inactive: 앱이 포어그라운드에 있지만 이벤트를 받지 않은 상태(주로 전화가 오거나 인터페이스가 잠시 차단된 경우)
- Active: 앱이 포어그라운드에 있으며 이벤트를 받고 있는 상태
- Background: 앱이 화면에 보이지 않지만 코드를 실행할 수 있는 상태
- Suspended: 앱이 백그라운드에 실행되고 있지만 코드를 실행하지 않는 상태(리소스 절약하기 위해 메모리에 남아있는 경우)
앱 상태 변화에 따라 호출되는 AppDelegate 메서드들
- application(_:didFinishLaunchingWithOptions:)
- 앱이 처음 실행될 때 호출되는 메서드
- 앱의 초기화 작업을 수행하거나 초기 데이터를 로드하는 등의 작업
- applicationWillResignActive(_:)
- 앱이 활성 상태에서 비활성 상태로 전환될 때 호출
- 예를 들어, 전화 수신이나 알림 메시지 등으로 인해 앱이 일시적으로 중단될 때 호출
- 필요한 경우 데이터를 저장하거나 일시 중지 작업을 수행 가능
- applicationDidEnterBackground(_:)
- 앱이 백그라운드 상태로 들어갈 때 호출
- 앱이 백그라운드에서 실행되는 동안 필요한 작업을 수행 가능
- 일반적으로 데이터 저장, 업데이트, 백그라운드 작업 등을 수행
- applicationWillEnterForeground(_:)
- 앱이 백그라운드에서 포어그라운드로 전환될 때 호출
- 앱의 UI를 업데이트하거나 필요한 데이터를 다시 로드하는 작업을 수행 가능
- applicationDidBecomeActive(_:)
- 앱이 비활성 상태에서 활성 상태로 전환될 때 호출
- 앱이 다시 사용자 상호작용을 받을 준비가 되었음을 의미
- applicationWillTerminate(_:)
- 앱이 종료될 때 호출
- 앱 종료 전에 필요한 정리 작업을 수행 가능
- 데이터 저장, 네트워크 연결 해제, 공유 리소스 해제 등의 작업을 수행 가능
백그라운드에서 작업을 완료하기 위한 방법들
추가적인 학습을 할 예정
- 여러 개의 UI Scene을 가지는 앱, 멀티태스킹을 지원하여 여러 창을 띄우는 기능 가능 [본문으로]