앱의 생명주기(iOS 13.0 이상 기준)

앱의 생명주기의 종류

  • 생명주기란?
    • 앱의 최초 실행부터 앱이 완전히 종료될 때까지 앱이 가지는 상태들과 그 상태들 사이의 전이를 뜻합니다.
  • 앱의 생명주기란?
    • 앱의 실행, 종료 및 앱이 Foreground, Background에 있을 때 시스템이 발생시키는 이벤트에 의해 앱의 상태가 변하는 일련의 과정을 뜻합니다. 
  • 앱의 상태 종류
    • Not Running
      • 앱이 실행되기 전의 상태입니다.
    • Foreground(InActive)
      • 앱이 화면에서 실행중이지만 어떠한 신호도 받지 않는 상태입니다.
      • ex) 시스템 알람, 제어센터 내리기, App switching 등
    • Foreground(Active)
      • 앱이 화면에서 실행되고 있는 상태입니다.
      • ex) 사용자가 직접 화면을 볼 수 있는 상태입니다.
    • Background
      • 앱이 화면에 보이진 않지만 코드를 실행하고 있는 상태입니다.
    • Suspended
      • 앱을 다시 실행했을 때 최근 작업을 빠르게 로드하기 위해 메모리에 관련 데이터만 저장되어 있는 상태입니다.
      • 앱이 곧 종료될 상태(Suspend된 앱은 시간이 지나면 Not Running 상태로 바뀌게 됩니다.) 

Scene의 연결 과정

1. 앱 실행

application(_: didFinishLaunchingWithOptions:) 
  • 앱이 실행되고 앱을 화면에 띄울 준비가 끝난 뒤 실제로 화면에 보여지기 전에 실행

 

2. Scene 연결

  • UIKit에 Scene을 연결해주는 과정들
application(:configurationForConnecting: options: )
  • 새로운 Scene 생성 + UIKit와 연결해주기 위해 configuration를 지정해줍니다.

 

scene(_:willConnectTo:options: )

  • Scene이 연결될 것을 delegate에 알려줍니다.
  • CodeBase로 UI를 짤 때 rootView를 설정해주는 곳입니다.
  • StoryBoard를 사용하면 entry point를 찾아 UIWindow를 생성해줍니다.

 

sceneDidBecomeActive(_:)
  • 앱이 Inactive -> Active 상태로 전환되었을 때 호출됩니다.

Scene의 연결 해제 과정

sceneDidDisconnected(_:)
  • delegate에 UIKit에 연결된 Scene의 연결을 해제할 것을 요청합니다.

 

application(_: didDiscardSceneSessions:)
  • 사용자가 멀티태스킹 창(app Switcher)에서 한 개 이상의 Scene을 종료시켰을 때 호출됩니다.

 

applicationWillTerminate(_:)
  • 앱이 사용자에 의해 종료될 때 호출됩니다.
  • 크래시 나거나 예기치 못한 상황에서 종료될 때는 호출되지 않습니다.

앱 실행후 홈 화면으로 나가면? 다시 앱으로 들어오면?

  • 앱 실행 후 홈 화면으로 나갔을 때
    • Active -> InActive -> Background  -> (Suspended)
sceneWillResignActive(_:)
  • Activate -> InActive 상태로 변할 때 실행됩니다.

 

sceneDidEnterBackground(_:)
  • InActive -> Background 상태로 변할 때 실행됩니다.

 

  • Background에 있는 앱을 다시 실행했을 때
    • Background -> InActive -> Active
sceneWillEnterForeground(_:)
  • Backgorund -> InActive 상태로 변할 때 실행됩니다.

 

sceneDidBecomeActive(_:)
  • InActive -> Active 상태로 변할 때 실행됩니다.

+ Recent posts