본문 바로가기

Mobile/IOS

[IOS] 앱의 생명주기(LifeCycle)

- 생명주기(Life Cycle)

생명주기라는 것은 앱의 최초 실행부터 앱이 완전히 종료되기까지 앱이 가지는 상태를 뜻합니다.

 

먼저

- 엡 상태(App State)

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

 

  • Not Running : 앱이 실행되지 않았거나, 완전히 종료되어 동작하지 않는 상태.
  • Inactive(Foreground) : 앱이 실행되면서 foreground에 진입하지만, 어떠한 이벤트도 받지 않는 상태, 앱의 상태 전환 과정에서 지나가는 단계이다.
  • Active(Foreground) : 앱이 화면상에서 사용자에게 보이며 실행중이며, 이벤트를 받고 있는 상태.
  • Backgroud : 앱이 백그라운드에 있으며, 다른 앱으로 전환되었거나 홈버튼을 눌러 밖으로 나갔을 때의 상태. 예를 들면 유튜브를 켜놓고 소리만 듣는 상태에 해당됩니다.
  • Suspended : 앱이 Background 상태에 있지만, 아무 동작을 하지 않는 상태이며 백그라운드에 특별한 작업이 없을 경우 Suspended 상태가 됩니다. 이 상태에서는 메모리 상에서만 올라가 있으며, OS에 의해 메모리가 부족하면 앱을 메모리에서 없어질 수 있습니다.

- IOS12이하 버전과 IOS13 이상 버전의 차이

먼저 바뀐 점을 설명드리면 12이 이하 까지는 Scene을 지원하지 않았습니다. 13 이상 부터 Scene을 지원하게 되었습니다

 

- IOS 12 이하

 

- IOS 13 이상

 

- Scene은 무엇인가?

UIKit는 UIWindowScene 객체를 사용하는 앱 UI의 각 인스턴스를 관리합니다. Scene에는 UI의 하나의 인스턴스를 나타내는 windows와 view controllers가 들어있습니다. 또한 각 scene에 해당하는 UIWindowSceneDelegate 객체를 가지고 있고, 이 객체는 UIKit와 앱 간의 상호 작용을 조정하는 데 사용합니다. Scene들은 같은 메모리와 앱 프로세스 공간을 공유하면서 서로 동시에 실행됩니다. 결과적으로 하나의 앱은 여러 scene과 scene delegate 객체를 동시에 활성화할 수 있습니다.

 

UI 상태를 알 수 있는 UILifeCycle 역할을 SceneDelegate가 하게 되었습니다. 역할이 분리되면서 AppDelegate에서 Scene Sisson을 통해 scene에 대한 정보를 업데이트 받습니다.

 

- Scene Session?

UISceneSession 객체는 scene의 고유의 런타임 인스턴스를 관리합니다. 사용자가 앱에 새로운 scene을 추가하거나 프로그래밍적으로 scene을 요청하면, 시스탬은 그 scene을 추적하는 session 객체를 생성합니다. 그 session에는 고유한 식별자와 scene의 구성 세부사항(configuration details)가 들어있습니다. UIKit는 session 정보를 그 scene 자체의 생애(life time)동안 유지하고 app switcher에서 사용자가 그 scene을 클로징하는 것에 대응하여 그 session을 파괴합니다. session 객체는 직접 생성하지않고 UIKit가 앱의 사용자 인터페이스에 대응하여 생성합니다.

또한 위 그림의 두 메소드를 통해서 UIKit에 새로운 scene과 session을 프로그래밍적 방식으로 생성할 수 있습니다.

 

- IOS13부터 AppDelegate가 하는 일

이전에는 foreground에 들어가거나 background로 이동할 때 앱의 상태를 업데이트 하는 등의 앱의 주요 생명 주기 이벤트를 관리했지만 더 이상 하지 않으며 현재 하는 일은 5가지 입니다.

 

  1. 앱의 가장 중요한 데이터 구조를 초기화하는 것
  2. 앱의 scene을 환경설정(Configuration)하는 것
  3. 앱 밖에서 발생한 알림(배터리 부족, 다운로드 완료 등)에 대응하는 것
  4. 특정한 scenes, views, view controllers에 한정되지 않고 앱 자체를 타겟하는 이벤트에 대응하는 것.
  5. 애플 푸쉬 알림 서브스와 같이 실행시 요구되는 모든 서비스를 등록하는것.

- Scene-Based Life-Cycle

- Foreground

  • Inactive : 앱이 실행 중인 상태이나 이벤트를 받지는 않음. Active 상태로 넘어가기 전에 앱은 반드시 거치는 상태. 알림 같은 특정 알림창이 화면을 덮어서 앱이 event를 받지 못하는 상태
  • Active : 앱이 실행 중이고 이벤트를 받을 수 있는 상태. Foreground 앱의 일반적인 상태

- Background

  • 앱 사용 중에 다른 앱을 실행하거나 홈 화면으로 나갔을 때 상태. 백그라운드에서 동작하는 코드를 추가하면 suspended 상태로 넘어가지 않고 백그라운드 상태를 유지. 처음부터 background 상태로 실행되는 앱은 inactive 대신 background 상태로 진입. 예를 들면 음악을 실행하고 홈 화면으로 나가도 음악이 나오는 상태

- Suspend

  • 앱이 background 상태에서 추가적인 작업을 하지 않으면 곧바로 suspended 상태로 진입. 앱이 다시 실행할 경우 빠른 실행을 위해 메모리에는 올라가 있음. 메모리가 부족한 상황이 되면 IOS는 suspended 상태에 있는 메모리에서 해제