Swift

Swift - iOS 앱의 라이프 사이클 (App's Life Cycle)

iosos 2023. 6. 29. 16:33

* 생명주기 (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