[iOS] iOS 앱 생명주기

!·2022년 7월 30일
0

iOS

목록 보기
3/22
post-thumbnail

앱 생명주기

앱의 생명주기는 앱의 실행부터 종료까지, 시스템으로 받아오는 Event에 의해 앱의 상태전환이 이루어지는 일련의 과정을 뜻한다.

iOS 12 이전에는 AppDelegate 객체 하나로 앱의 생명주기 전체를 관리하는 콜백함수를 작성했지만,

iOS 13 이후부터는 SceneDelegate 객체가 추가되어, 이 객체가 UI 생명주기 역할을 하게되었다.


AppDelegate

AppDelegate 에서는 앱이 어떤 상태에 들어가거나 나올때 생성되기 직전 혹은 직후에 생성되며, 앱의 Life Cycle 을 전달받고 함수를 실행한다.

  • application(_:willFinishLaunchingWithOptions:) : 스플래쉬 화면이 나오기 전에 호출된다.
  • application(_:didFinishLaunchingWithOptions:) : 스플래쉬 화면이 나온 직후에 호출되므로, 사용자의 데이터를 초기화할때 주로 작성한다.

앱 상태

  • Not running : 앱이 실행되지 않거나, 앱이 종료되어있는 상태.
  • Inactive : 앱이 화면 전면에서 실행중이나, 이벤트를 받지 못하는 상태를 말한다. 예를 들어 시스템 알람(배터리부족 등)이 나타났을 경우이다. 이 경우는 Active 상태로 가기전에 잠시 머무는 상태이다.
  • Active : 앱이 화면 전면에서 실행중이며, 이벤트를 받을 수 있는 상태.
  • Background : 앱이 화면 아래로 내려간 상태이며, 예를 들어 해당 앱을 실행중에 다른 앱을 열었을 때 이 경우에 속한다. Suspended 상태가 되기 전에 잠시 머무는 상태이며, Suspended 상태가 되기 전에 추가적인 코드 수행이 필요할 시 더 머무를 수 있다. 음악 어플을 화면에서 내려놓고 음악이 흘러나오는 경우가 이에 해당한다.
  • Suspended : Background 상태에서 별 다른 명령이 없다면 Suspended 상태로 진입하며, 메모리 위에 올라와 있지만 배터리를 소모하지 않는다. 또한 iOS System 은 메모리가 부족할 시 별다른 알림 없이 상태에 있는 앱을 종료한다.

App/SceneDelegate 메소드

Not running 상태

  • application(_:willFinishLaunchingWithOptions:) : 앱이 실행을 위한 초기화가 완료 되기 전에 실행되는 메소드로 일반적으로 앱 실행 시 최초로 실행할 코드를 작성한다.
  • application(_:didFinishLaunchingWithOptions) : 앱이 실행될 때 실행되는 메소드로, 앱이 초기화가 완료되고 화면에 보여지기 직전에 호출되는 메소드이다. 주로 최종 초기화 코드를 작성하며, Not running 상태에서 Foreground 상태로 전환된다.
  • applicationWillTerminate(_:) : 앱이 종료되기 직전에 호출되며, 정상 종료(사용자가 직접 종료)외에는 종료되지 않는다. 예를 들어, OS에 의한 강제종료, Device 재부팅 등..

Foreground 상태

  • sceneWillEnterForeground :
    Background 상태에서 Foreground 상태로 전이될 때 실행되며, 앱이 Background에서 Foreground로 돌아오기 직전, 즉 화면에 보여지기 직전 호출, 호출된 뒤 Inactive 상태를 거쳐 Active 상태로 진입
  • sceneWillResignActive : Active 상태에서 InActive 상태로 전이될 때 호출되며, 앱이 Inactive 상태로 전환되기 직전 호출된다.
  • sceneWillEnterForeground(_:) : 앱이 background나 not running에서 foreground로 들어가기 직전에 호출, Inactive 상태를 거쳐 Active 상태가 된다.
  • sceneWillResignActive(_:)
    App Switcher 모드(홈 바 쓸어 올렸을 경우 또는 홈 버튼 모델 홈 버트 두번 눌렀을 경우)
    앱이 Active에서 Inactive로 이동될 때 실행된다.

Active 상태

  • sceneDidBecomeActive(_:) : 주로 최종 초기화 코드를 작성한다.Not running 상태에서 Foreground 상태로 전환되고 난 직후 호출
  • sceneDidBecomeActive(_:) : 앱이 Inactive 상태에서 Active 상태가 되었을 떄 호출된다.

Background

  • sceneDidEnterBackground : 앱이 Background 상태로 전환된 직후 호출 앱이 언젠가 종료될 것임을 뜻하기 때문에 중요한 사용자 데이터를 저장하거나, 공유 자원을 해제하는 등의 작업 수행 필요하다. 혹은 앱이 재실행될 때 직전 상태를 복구할 수 있는 정보를 저장하는 코드
  • sceneDidEnterBackground(_:) : 앱이 Background 상태로 들어갔을 때 호출되며, Suspended 상태가 되기 전 중요한 데이터를 저장하는 등 종료하기 전 필요한 작업을 한다.

Suspended

  • 따로 호출 되는 메소드 없다.

참고 : 여기, 여기

profile
개발자 지망생

0개의 댓글