본문 바로가기
iOS

[iOS] App의 Life Cycle

by thoonk: 2021. 1. 16.
반응형

앱이 포그라운드나 백그라운드에 있을 때 시스템 알림에 응답하고 다른 중요한 시스템 관련 이벤트를 처리한다.

 

Overview

앱의 현재 상태에 따라 언제든지 할 수 있는 것과 하지 못하는 것이 결정된다.

예를 들어, 앱이 포그라운드 상태일 때 사용자의 주의를 끌기 때문에, CPU를 포함한 시스템 자원의 우선순위를 갖는다.

반대로 앱이 백그라운드 상태일 때 화면에 없기 때문에 가능한 한 적은 일을 해야하고 아무것도 안하는 것을 선호한다.

앱이 변경되는 상태에 따라 앱의 동작을 조정해야 한다.

 

앱의 상태가 변경될 때, UIKit은 적절한 델리게이트 객체를의 메서드를 호출해준다.

  • iOS13 이상 버전은 scene 기반 앱의 경우 라이프사이클 이벤트에 반응하기 위해 UISceneDelegate 객체를 이용한다.
  • iOS12 이하 버전은 라이프사이클 이벤트에 반응하기 위해 UIApplicationDelegate 객체를 이용한다.

Note:

앱에서 scene support를 활성화하면 iOS는 iOS13 이상 버전에서는 항상 scene delegate를 사용한다. iOS 12 이하 버전에서는 app delegate를 사용한다.

 

Respond to Scene-Based Life-Cycle Events

앱에서 scene을 지원한다면, UIKit은 각 scene에 대한 별도의 라이프 사이클 이벤트를 전달한다.

scene은 기기에서 실행되는 앱 UI의 인스턴스를 나타낸다.

사용자는 각 앱에 대해 여러 개의 scene을 만들 수 있고 개별적으로 보여주고 숨길 수 있다. 왜냐하면 각 scene은 자기 자신의 라이프 사이클이 있기 때문에, 다 다른 실행 상태에 있을 수 있다.

예를 들어, 한 scene이 포그라운드 상태에 있는 동안 다른 scene들은 백그라운드에 있거나 중단되어있을 수 있다.

 

Important:

scene은 opt-in* 기능이다. 기본적인 지원을 활성화하려면, Specifying the Scenes Your App Supports에 설명된데로 UIApplicationSceneManifest 키를 Info.plist파일에 추가하면 된다.

 

아래 그림에서는 scene의 상태 전이를 보여준다. 사용자 또는 시스템이 앱에서 새로운 scene을 요청한다면 UIKit은 scene을 만들고 연결되지 않은 상태에 배치한다.

  • 사용자 요청 scene은 스크린에 보여지기 위해 포그라운드 상태로 빠르게 이동한다.
  • 시스템 요청 scene은 일반적으로 이벤트를 처리할 수 있도록 백그라운드 상태로 이동한다.

예를 들어, 시스템은 위치 이벤트를 처리하기 위해 백그라운드 상태로 scene을 시작할 수 있다. 사용자가 앱 UI를 닫으면 UIKit은 연결된 장면을 백그라운드 상태로 이동하고 결국에는 일시 중단된 상태로 된다. UIKit은 언제든지 백그라운드 또는 일시 중단된 scene을 연결 해제하고 리소스를 회수하여 해당 scene을 연결되지 않은 상태로 되돌릴 수 있다.

 

scene 전환을 사용하여 다음 작업을 수행한다.

  • UIKit이 scene을 앱에 연결하면 scene의 초기 UI를 구성하고 필요한 데이터를 로드한다.
  • 포그라운드 활성 상태로 전환할 때 UI를 구성하고 사용자와 상호작용할 준비를 한다.
  • 포그라운드 활성 상태를 벗어나면 데이터를 저장하고 앱 동작을 조용히(quiet)한다.
  • 백그라운드 상태에 들어가면 중요한 작업을 완료하고 가능한 한 많은 메모리를 확보하고 앱 스냅 샷을 준비한다.
  • scene연결이 끊어지면 관련된 모든 공유 리소스를 정리한다.
  • scene관련 이벤트 외에도 개체를 사용하여 앱이 시작하는 것에 응답해야 한다.

Respond to App-Based Life-Cycle Events

iOS 12 버전 이하는 scenes을 지원하지 않고 UIKit은 모든 라이프사이클 이벤트를 UIApplicationDelegate 객체에 전달한다. 앱 델리게이트는 별도의 화면에 표신된 창을 포함한 앱의 모든 창(windows)을 관리한다. 결과적으로, 앱의 상태 전환은 외부 화면의 내용을 포함한 앱 전체의 UI에 영향을 준다.

 

아래 그림은 앱 델리게이트 객체와 관련된 상태 전환을 보여준다. 앱 실행 후, 시스템은 UI가 화면에 표시되는 여부에 따라 앱을 비활성화 또는 백그라운드 상태로 둔다. 포그라운드 상태로 시작할 때 시스템은 앱을 자동으로 활성화 상태로 전환한다. 그 후, 앱의 상태는 앱이 종료 될 때까지 활성 그리고 백그라운드 상태 사이에서 변동한다.

아래의 작업을 수행할 때 앱의 상태 전환을 사용한다.

  • 시작시, 앱의 데이터 구조와 UI를 초기화한다.
  • 활성화시, UI 구성과 사용자와 상호작용할 준비를 끝낸다.
  • 비활성화되면 데이터를 저장하고 앱의 동작을 조용히(quiet)한다.
  • 백그라운드 상태에 들어가면 중요한 작업을 완료하고 가능한 한 많은 메모리를 확보하고 앱 스냅 샷을 준비한다.
  • 종료시 모든 작업을 즉시 중지하고 모든 공유 자원을 해제한다.

Respond to Other Significant Events

라이프 사이클 이벤트를 처리하는 것 외에도, 앱은 아래 표에 따라 이벤트를 처리할 준비가 되어 있어야 한다. 대부분의 이벤트들을 처리하는데 UIApplicationDelegate를 사용한다. 몇몇의 경우에는 알림을 사용하여 앱의 다른 부분에서 응답하도록 허용할 수 있다.

 

Memory warnings

  • 앱의 메모리 사용량이 지나치게 높을 때 수신된다. 앱이 사용하는 메모리 양을 줄인다.

Protected data becomes available/unavailable

  • 사용자가 기기를 잠그거나 해제될 때 수신된다.

Handoff tasks

  • NSUserActivity 객체를 처리해야 할 때 수신된다.

Time changes

  • phone carrier가 시간을 업데이트하는 경우와 같이 몇몇의 다른 시간이 변경되었을 때 수신된다.

Open URLs

  • 앱이 자원(resource)을 열어야 할 때 수신된다.

 

*opt-in:

옵트인(opt-in) 은 당사자가 개인 데이터 수집을 허용하기 전 까지 당사자의 데이터 수집을 금지하는 제도이다.

 

출처: 

developer.apple.com/documentation/uikit/app_and_environment/managing_your_app_s_life_cycle

 

Apple Developer Documentation

 

developer.apple.com

 

반응형

댓글