앱의 라이프 사이클

애플리케이션 자체의 생명주기라는 것은 총 5가지 상태를 갖는다.

그리고 그 5가지 상태는 꽤나 직관적으로 이해하기 쉬운 것들이다.


스크린샷 2020-10-21 오후 4 39 40

Not Running

첫 번째는 Not Running 상태로,

의미는 앱이 아직 실행되지 않은 상태. 또는 완전히 종료되어 동작하지 않는 상태. 이다.


Foreground - Inactive

두 번째는 Inactive 상태이다.

app이 실행중이더라도 사용자와 상호작용할 수 없는 상태를 말한다.

multitasking window에서 사용자가 다른 앱을 사용하고 있거나 app 실행 중 전화 등의 이유로 app을 사용할 수 없는 경우가 이에 해당한다.


Foreground - active

앱을 켜서 사용중인 상태이다.

참고로 앱이 실행되면 app은 Not running -> foreground-Inactive -> foreground-active의 과정을 거친다.


Background - Running

앱을 실행했다가 홈 버튼을 눌러서 나온 경우나 다른 앱으로 전환한 경우 background 상태에 있다고 함.

이 때 음악 앱처럼 백그라운드에서도 계속 동작하는 경우 background - running 상태에 있다고 한다.


Background - Suspended

앱은 background 상태에 진입했을 때 다른 작업을 하지 않으면 Suspended 상태로 진입한다.

이 상태에서 os는 앱을 다시 실행했을 때 빠르게 로드할 수 있게 관련 데이터만 메모리에 올려놓는다.

만약 메모리가 부족해진다면 os는 이들 앱부터 메모리에서 해제한다.


추가로 알아둘만한 점

iOS13 이상부터는 UI Life Cycle은 Scene Delegate가, Process Life Cycle은 App Delegate가 관리한다.

이전에는 둘을 합쳐 UIApplicationDelegate에서 관리했다고.


앱의 라이프 사이클과 관련된 함수들


image


앱 실행 시

앱이 실행될 때 앱은 Not running 상태에서 바로 foreground - Active 상태가 되는 것이 아니라,

Not Running -> Inactive -> Active 의 과정을 거친다.

이와 관련된 함수는

  • application(_:didFinishLaunchingWithOptions:)
    앱이 실행되고 앱을 화면에 띄우기 위한 모든 설정이 완료된 뒤에 호출된다. Storyboard를 사용한다면 storyboard에서 entry point를 찾아 내부적으로 UIWindow를 생성한다. 코드로 Window를 생성한다면 해당 함수 안에서 생성한다.
  • applicationDidBecomeActive(_:)
    앱이 Inactive에서 Active 상태로 전환되는 경우 호출된다.

앱이 백그라운드로 갈 때

앱 실행 중 홈 버튼을 눌러서 백그라운드로 가게 되는 상황에서는 다음과 같은 과정을 거친다.

Active -> Inactive -> Background (-> Background-suspended).

이런 과정을 거치면서 앱은 다음 메서드를 호출하게 된다.

  • applicationWillResignActive(_:)

    앱이 Active->Inactive로 갈 때 호출.

  • applicationDidEnterBackground(_:)

    앱이 Background 상태로 전환되었을 때 호출된다.


백그라운드에서 포어그라운드(Background to Foreground)로 올 때

이 경우에도 Inactive 상태를 거침.

Background -> foreground-Inactive -> foreground-Active 처럼.

이 과정에서는 다음 메서드가 호출된다:

  • applicationWillEnterForeground(_:)

    앱이 Background에서 Inactive로 전환될 때

  • applicationDidBecomeActive(_:)

    앱이 Inactive에서 Active 상태로 전환될 때


앱 종료시

앱이 어떤 과정을 거쳐서 종료가 되든 다음의 메서드를 호출한다:

  • applicationWillTerminate(_:)

    시스템이 오류로 종료될 때에는 호출되지 않는다!


앱 라이프 사이클에 따른 Scene 기준 메서드들은 아래 블로그 참조

https://velog.io/@rnfxl92/%EC%95%B1-%EC%83%9D%EB%AA%85%EC%A3%BC%EA%B8%B0-Application-Life-Cycle


  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기
// custom