관리 메뉴

J

[iOS] App's life cycle 본문

iOS

[iOS] App's life cycle

yujaehui 2024. 8. 20. 00:36

앱의 생명주기(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