App's Life Cycle

6829 단어 iOSiOS

App's Life Cycle(앱의 수명 주기)

App의 생명 주기는 App의 실행,종료 및 App의 Foreground,Background 상태에 있을 때 시스템이 발생시키는 event에 의해 App의 상태가 전환되는 일련의 과정을 뜻한다.

1. Background

앱이 화면상에서 보여지지 않는 상태
가능한 적은 기능을 수행해야 한다.
화면 밖에 있기때문에 가급적 아무것도 하지 않는것이 좋다.

2. Foreground

앱이 화면에 올라와 있는 상태

App이 실행되면 발생되는 상황

  1. UIApplication
  2. @UIApplicationMain 또는 @Main 어노테이션이 있는 클래스를 찾아 AppDelegate 객체 생성
  3. Main Event Loop 를 실행(touch, text input등 사용자의 액션을 받는 루프)

Main Run Loop

Main Run Loop 는 유저가 일으키는 이벤트들을 처리하는 프로세스다.

UIApplication 객체는 앱이 실행될 때, Main Run Loop를 실행하고
Main Run Loop 를 View와 관련된 이벤트나 View의 업데이트에 활용 한다.

Main Run Loop 는 View와 관련되어 있기 때문에 Main 스레드 에서 실행 된다.

이벤트 처리 순서
1. 유저가 이벤트를 발생 시킨다.(터치, 스와이프 등 조작)
2. 시스템을 통해 이벤트가 생성된다.
3. UIKit 프레임워크를 통해 생성된 port 로 해당 이벤트가 앱으로 전달.
4. 이벤트는 앱 내부에 Queue 형태로 저장된다.
5. Event Queue 에 있는 이벤트들이 Main Run Loop 에 하나씩 매핑된다.
6. UIApplication 객체는 어떤 이벤트를 가장 먼저 실행 되어야 하는지 결정한다.

AppDelegate 와 SceneDelegate

IOS12 이하의 버젼

하나의 앱에 하나의 window!

AppDelegate 가 두개의 LifeCycle 을 관리한다.

    1. process LifeCycle
    1. UI LifeCycle

IOS13 이상의 버젼

창(window)의 개념이 scene 으로 대체되고 하나의 앱에서 여러개의 scene 을 가질수 있다.

AppDelegate 와 SceneDelegate 가 LifeCycle 을 관리 한다

  • AppDelegate
      1. Process LifeCycle
      1. Session LifeCycle
  • SceneDelegate
      1. UI LifeCycle

AppDelegate 의 기능이 SceneDelegate 로 분리되고 AppDelegate 에 Session LifeCycle 이라는 새로운 사이클을 담당하게 된다.

Session LifeCycle 은 Scene 에 대한 정보를 관리한다.

Scene 의 개념이 생긴 이유

멀티 윈도우 환경을 제공하기 위해 생긴이유가 가장크다.

아이폰은 멀티 윈도우를 제공하지 않지만 아이패드 같은경우 멀티 윈도우 기능을 제공한다.
기존엔 한개의 앱이 한개의 UI instance 를 갖는 형태였지만
한개의 앱에서 여러개의 UI instance 들을 갖는 형태를 만들기 위해 Scene 이라는 개념이 생겨 났다.

예를들자면 메모어플, 일정어플 등 아이패드에서 분할 화면으로 작업할때 한화면에서 작업한 내용이 다른화면에서도 반영하고 싶은경우 활용 할 수 있다.

멀티 윈도우란?

한개의 앱에서 여러개의 window(UI instance) 를 가질수있는 것을 뜻함.
크롬의 새창 버튼과 같은 것. 앱은 하나지만 보여지는것은 각기 다른 2개의 화면을 볼수있음.

SceneDelegate.swift 파일

각 Scene 의 라이프 사이클(UI LifeCycle)을 관리한다.

UISceneDelegate

@MainActor protocol UISceneDelegate

scene의 라이프 사이클
1. scene()

  • scene 이 앱에 추가될때 호출됨
  1. sceneDidDisconnect()
  • scene 의 연결이 해제될때 호출됨
  1. sceneDidBecomeActive()
  • scene 이 활성화 되었을때 호출됨
  1. sceneWillResignActive()
  • scene 이 활성상태를 멈출때 호출됨
  1. sceneWillEnterForeground()
  • scene 이 실행되어 사용자에게 표시될때 호출됨
  1. sceneDidEnterBackground()
  • scene 이 백그라운드에서 실행중이며 더이상 화면에 표시되지 않을때 호출됨

AppDelegate.swift 파일

  1. 앱의 중요한 데이터 초기화
  2. 앱의 scene 환경설정
  3. 앱밖에서 발생한 알림(배터리 부족, 다운로드 완료 등)에 대응
  4. 특정한 scene, view, viewController에 한정하지 않고 앱자체 타겟 이벤트에 대응
  5. 푸시알림 서비스 같은 실행시 요구되는 서비스 등록

UIApplicationDelegate

@MainActor protocol UIApplicationDelegate

Respond to App-Based Life-Cycle Events(앱 라이프사이클 기반 이벤트 처리)(IOS12 이하 버젼)

1. Not Running

  • 앱이 실행되지 않았거나, 완전히 종료되어 동작하지 않는 상태

2. Inactive

  • 앱 시작시 앱의 데이터 구조와 UI를 초기화 함.

3. Active

  • 앱이 실행중이고 이벤트를 받을수 있는 상태.
  • Foreground 의 일반적인 상태.

4. Active -> Inactive

  • Foreground Active 상태를 벗어나면 데이터를 저장하고 앱의 동작을 멈춘다.

5. Background

  • 앱 사용중 다른앱을 실행하거나 홈 화면 으로 나갔을떄 의 상태.
  • Background 에서 동작하는 코드를 추가하면 Suspended 상태로 넘어가지 않고 백그라운드 상태를 유지함.
  • 처음부터 Background 상태로 실행되는 앱은 Inactive 대신Background 상태로 진입.(음악 실행후 화면 에서 나가도 음악이 재생되는 상태)

6. Suspended

  • 앱이 Background 상태에서 추가적인 작업을 하지 않으면 Suspended 상태로 진입.
  • 앱을 다시 실행할 경우 빠른 실행을 위해 메모리에는 올라가 있음.
  • 메모리가 부족해지면 IOS 는 Suspended 상태의 앱들을 메모리에서 해제함.

Respond to Scene-Based Life-Cycle Events(화면 라이프사이클 기반 이벤트 처리)(IOS13 이상 버젼)

1. Unattached

  • 사용자나 시스템이 앱에 대해서 새로운 씬을 요청하면 UIkit이 장면을 앱에 연결할 때 장면의 초기 UI를 구성하고 장면에 필요한 데이터를 로드 한다.
  • 사용자가 Scene을 요청하면 Foreground 로 이동한다.
  • 시스템이 Scene을 요청하면 Background 로 이동한다.

2. Foreground Inactive

  • Foreground가 Active 되기전 잠깐 거치는 단계
  • ACtive 상태로 전환할때 UI를 구성하고 사용자와 상호 작용할 준비를한다.
  • 앱이 실행중인 상태지만 이벤트를 받지 않는다.
  • 알림 같은 특정 알림창이 화면을 덮어 앱이 event를 받지 못하는 상태

3. Foreground Active

  • 앱이 실행중이고 이벤트를 받을수 있는 상태.
  • Foreground 의 일반적인 상태.

4. Foreground Active -> Foreground Inactive

  • Foreground Active 상태를 벗어나면 데이터를 저장하고 앱의 동작을 멈춘다.

5. Background

  • 앱 사용중 다른앱을 실행하거나 홈 화면 으로 나갔을떄 의 상태.

  • Background 에서 동작하는 코드를 추가하면 Suspended 상태로 넘어가지 않고 백그라운드 상태를 유지함.

  • 처음부터 Background 상태로 실행되는 앱은 Inactive 대신Background 상태로 진입.(음악 실행후 화면 에서 나가도 음악이 재생되는 상태)

  • 예정작업? 백그라운드에서 언어타치드 로 가능 이유?

  • 백그라운드 기능중에 예정 작업 같은 기능이있는데 대강 어느정도 시간이지나면 이거를 해라 저거를 해라 지정할수 있음

6. Suspended

  • 앱이 Background 상태에서 추가적인 작업을 하지 않으면 Suspended 상태로 진입.
  • 앱을 다시 실행할 경우 빠른 실행을 위해 메모리에는 올라가 있음.
  • 메모리가 부족해지면 IOS 는 Suspended 상태의 앱들을 메모리에서 해제함.

좋은 웹페이지 즐겨찾기