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(_:)
    • 앱이 종료될 때 호출
    • 앱 종료 전에 필요한 정리 작업을 수행 가능
    • 데이터 저장, 네트워크 연결 해제, 공유 리소스 해제 등의 작업을 수행 가능

백그라운드에서 작업을 완료하기 위한 방법들

추가적인 학습을 할 예정

  1. 여러 개의 UI Scene을 가지는 앱, 멀티태스킹을 지원하여 여러 창을 띄우는 기능 가능 [본문으로]