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가 되는 시나리오는?
- 사용자의 입력을 App에서 받을 수 없는 상태.
- 전화, SMS 메세지, 시스템 메세지(배터리), 알림 등이 떳을 때
- 잠금 상태인 경우
- multitasking window로 진입하는 경우
- 다른 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가 되는 시나리오는?
- Foreground 상태에서 홈화면으로 나가는 경우
- 다른 App으로 전환하는 경우
→ 예를들어 음악 재생 앱이나 지도 앱 같은 경우 App을 닫아도 사용자가 종료하지 않는 한 Background 상태에서 서버를 동기화하거나 타이머가 실행되어야 하는 등의 작업을 수행합니다.
Background - Suspended
App이 Background에 있지만, 코드를 실행시키진 않는 상태를 말합니다.
App을 다시 실행했을 때 최근 작업을 빠르게 로드하기 위해 메모리에 최소한의 관련 데이터만 저장되어있는 상태 입니다.
App이 Background에 진입했을 때 다른 작업을 하지 않으면 Suspended 상태로 진입하게 됩니다.
Suspended 상태의 App들은 iOS의 메모리가 부족해지면 가장 먼저 메모리에서 해제됩니다.
따라서 App을 종료시킨적이 없더라도 App을 다시 실행하려고 하면 처음부터 다시 실행됩니다.
'iOS > 개념' 카테고리의 다른 글
[Swift] UITouch vs UIGestureRecognizer (0) | 2021.03.07 |
---|---|
[iOS] addTarget, @objc, #selector (0) | 2021.02.07 |
[iOS][업뎃중] iOS 주요 개념 정리 (0) | 2021.01.24 |
[iOS] Frame 과 Bounds의 차이 (0) | 2021.01.04 |
[iOS] if kakao 2020 iOS 세션 후기 (0) | 2020.11.22 |