iOS/개념

[iOS] App States

누알라리 2021. 1. 24. 19:35

App에는 5가지 App State가 존재합니다.

App의 State가 변할 때 UIKit은 delegate 를 통해 개발자에게 이를 통지해줍니다.

  • iOS 13 이상: UISceneDelegate가 scene-base app에서의 state 변화 통지
  • iOS 12 이하: UIApplicationDelegate 가 통지

Not Running

앱이 launch 되지 않은 상태를 말합니다.

 

Foreground - InActive

Foreground에서 running 되고 있지만, 사용자에게 Event는 수신하지 않는 상태를 말합니다.

 

App이 inActive가 되는 시나리오는?

  1. 사용자의 입력을 App에서 받을 수 없는 상태.
    • 전화, SMS 메세지, 시스템 메세지(배터리), 알림 등이 떳을 때
    • 잠금 상태인 경우
    • multitasking window로 진입하는 경우
  2. 다른 state로 전환되는 동안에도 머무를 수 있음

Foreground - Active

Foreground에서 running되고, 사용자에게 Event를 수신하는 상태

Active 상태가 되거나, 탈출할 때는 무조건 inActive 상태를 통해야 합니다.

 

 

Background - Background

app이 background에서 실행되고 코드를 실행시키는 상태를 말합니다.

 

Background 상태로 전환되기 전에 호출된 Task가 끝나지 않은 경우 그 Task는 Background에서도 여전히 실행된다.

Background 상태로 전환된 후 호출된 Task는 App이 Foreground 상태로 전환된 후에 실행된다.

 

app을 처음 launch 하면 바로 inactive → active 상태로 전환됩니다.

하지만 app이 suspended 상태에서 다시 실행된다면 app은 background → inactive → active 상태로 전환됩니다.

또한 app이 바로 background 상태로 실행된다면, background 상태가 inactive 상태를 대신하게 됩니다.

 

App이 Background가 되는 시나리오는?

  1. Foreground 상태에서 홈화면으로 나가는 경우
  2. 다른 App으로 전환하는 경우

→ 예를들어 음악 재생 앱이나 지도 앱 같은 경우 App을 닫아도 사용자가 종료하지 않는 한 Background 상태에서 서버를 동기화하거나 타이머가 실행되어야 하는 등의 작업을 수행합니다.

 

Background - Suspended

App이 Background에 있지만, 코드를 실행시키진 않는 상태를 말합니다.

 

App을 다시 실행했을 때 최근 작업을 빠르게 로드하기 위해 메모리에 최소한의 관련 데이터만 저장되어있는 상태 입니다.

 

App이 Background에 진입했을 때 다른 작업을 하지 않으면 Suspended 상태로 진입하게 됩니다.

Suspended 상태의 App들은 iOS의 메모리가 부족해지면 가장 먼저 메모리에서 해제됩니다.

따라서 App을 종료시킨적이 없더라도 App을 다시 실행하려고 하면 처음부터 다시 실행됩니다.