* 생명주기 (Life Cycle)
- 앱의 최초 실행부터 앱이 완전히 종료되기까지 앱이 가지는 상태와 그 상태들 사이의 전이
* 앱의 생명 주기
- 앱의 실행, 종료 및 앱이 Foreground, Background 상태에 있을 때, 시스템이 발생시키는 이벤트에 의해 App의 상태가 전환되는 과정
* iOS 실행 시 동작 과정
- 앱은 main 함수에서 시작하지만 UIKit framework가 main 함수를 관리하기 때문에 앱 개발자가 직접 main 함수를 작성하진 않음
- UIKit은 main 함수를 다루는 과정에서 UIApplicationMain 함수를 실행
- 이 함수를 통해 UIApplication 객체가 생성 됨
- 이 객체를 통해 앱 개발자는 앱의 실행에 부분적으로 관여 가능
* 앱 상태
** Foreground : 앱이 화면에 올라와 있는 상태
* Not Running : 앱이 실행되고 있지 않은 상태
* InActive
- 앱이 실행되면서 foreground에 진입하지만, 어떠한 이벤트도 받지 않은 상태
- 앱의 상태 전환 과정에서 잠깐 머무는 상태
- 사용자가 앱을 full control이 불가하면 InActive 상태
- 외부적인 요인(interrupt)에 의해서 InActive 상태가 됨
- ex) 전화나 메시지가 온 경우
- InActive 상태에서 다시 Active 상태로 돌아올 수 있지만, 전화를 받는 경우 Foreground의 suspend 상태가 됨
* Active
- 앱이 동작하는 상태, 이벤트를 받음
- Active 상태는 InActive가 감싸고 있음
- 앱이 클릭하여 실행하면 Active 상태로 가지만 InActive 상태를 거침
- Active 상태에서 나오려고 해도 InActive 상태를 거쳐야 함
** Background : 앱이 화면 상에서 보이지 않는 상태
* Suspend
- Active 되길 기다리는 상태
- suspend 상태로 대기 중인 앱들이 메모리가 부족해지면 Not Running 상태가 됨
* Running
- Background 에서 타이머와 같은 작업을 실행하는 상태
- ios 자체적인 앱 제외하면 실행되는 시간이 길진 않음
- 제한된 시간 안에 실행을 끝내지 못하면 Not Running 상태가 됨
- 제한된 시간 안에 작업을 끝내면 suspend 상태로 대기
Foreground와 Background의 공통점
- 앱이 메모리에 올라가 있음
Foreground와 Background의 차이점
- Foreground 일 때는 앱이 화면을 점유하고 있음
- Background는 앱이 화면을 점유하고 있지 않음
AppDelegate 기준 실행 메서드
실행 시
application: willFinishLaunchingWithOptions: (앱이 실행되고 초기 설정이 완료된 후 호출)
- 앱이 초기화되고 실행되기 직전에 수행되는 작업을 처리
applicationDidBecomeActive: (앱이 활성화되어 사용자와 상호작용이 가능한 상태가 되었을 때 호출)
앱플리케이션이 InActive 상태로 들어갈 때
applicationWillResignActive: (앱이 비활성화되고 포그라운드에서 백그라운드로 전환되기 직전에 호출)
다시 Active 상태로 들어갈 때
applicationDidBecomeActive:
Background로 갈 때는 가고 나서
applicationDidEnterBackground (백그라운드로 전환되었을 때 호출)
다시 Foreground로 갈 때
applicationWillEnterForeground (백그라운드에서 포그라운드로 전환될 때 호출)
Background에서 Running 하다가 Timeout 발생 시, 메모리 부족으로 Not Running 상태가 될 때
applicationWillTerminate (앱이 종료되기 직전에 호출)
참고 )
https://www.youtube.com/watch?v=7GlwS2lOKbE
https://m.blog.naver.com/PostView.naver?blogId=soojin_2604&logNo=222423840595&proxyReferer=
'Swift' 카테고리의 다른 글
Swift - RESTful API (0) | 2023.06.30 |
---|---|
Swift - ViewControll의 LifeCycle (0) | 2023.06.29 |
Swift - Optional(옵셔널) (0) | 2023.06.28 |
Swift - UIScrollView 기초 (0) | 2023.06.28 |
Swift - UITableView 기초(1) (0) | 2023.06.27 |