앱 생명주기

zeke·2021년 6월 20일
2

UIKit

목록 보기
2/8

🔔 Overview

앱은 현재 상태에 따라 수행할 수 있는 작업인지, 아닌지 결정합니다.

예를들어 foreground상태의 앱이 유저의 주목을 받기 때문에 CPU를 포함한 시스템 리소스보다 좀 더 우선순위가 높습니다.

하지만, background상태의 앱은 화면 안에 없기 때문에 최소한의 작업을 수행하며 가급적이면 아무것도 하지 않아야 합니다.

우리는 앱 상태의 변화에 맞춰 동작들을 조정해야 합니다.

만약 앱 상태가 변하게 된다면, UIKit 은 적합한 delegate 객체의 메소드를 통해 우리에게 알려줍니다.

Note

iOS 13 혹은 그 이후 버전일때, scene을 지원한다면 iOS는 항상 Scene Delegates를 사용할 것입니다.
그러나 iOS 12 혹은 그 이전 버전이라면, 시스템은 App Delegate를 사용합니다.




🔔 들어가기 앞서 Scene이란?

Manage multiple instances of your app’s UI simultaneously, and direct resources to the appropriate instance of your UI.

즉, 앱 UI의 인스턴스를 동시에 관리하고, 리소스를 적절한 UI의 인스턴스로 보낸다고 하는데 확실히 와닿지는 않습니다.


개요를 살펴보겠습니다.

UIKit은 UIWindowScene객체를 사용하여 앱 UI의 인스턴스를 관리합니다.

Scene은 우리의 UI중 하나의 인스턴스를 나타내기 위한 window와 viewcontroller를 포함합니다.

각각의 Scene은 또한 UIKit과 앱간의 상호 작용을 조정하는데 사용하는 UIWindowSceneDelegate 객체를 갖고있습니다.

Scene은 동시에 실행되며, 같은 메모리를 공유하고 앱 프로세스 공간을 공유합니다.

결과적으로 단일 앱은 여러개의 Scene과 Scene delegate객체가 동시에 활성화 될 수 있습니다.




🔔 Scene기반의 생명주기 이벤트

앱이 Scene을 지원한다면 UIKit은 다양한 생명주기 이벤트를 각각 Scene에게 제공합니다.

유저는 각각의 앱마다 여러개의 Scene을 만들 수 있고 각 Scene마다 보여지거나 숨길 수 있습니다.

왜냐하면 각각의 Scene은 그들만의 생명 주기를 갖고 있기 때문입니다. 따라서, 이 Scene들을 각각 다른 실행 상태에 놓일 수 있습니다.

⚠️중요

Scene support is an opt-in feature. To enable basic support, add the UIApplicationSceneManifest key to your app’s Info.plist file as described in Specifying the Scenes Your App Supports.

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

Scene support란 사용자의 동의를 얻어야 사용할 수 있는 기능입니다.

Basic support를 사용하려면 UIApplicationSceneManifest의 key를 앱의 Info.plist파일에 추가해야 합니다. 자세한 설명은 다음 링크를 참고하세요.



밑에 보이는 그림은 여러 Scene들의 상태 전환을 보여드립니다.

사용자 혹은 시스템이 당신의 앱에 새로운 Scene을 요구하면, UIKit은 새로 생성하고 Unattached상태로 둡니다.

그리고 유저가 요청한 Scene(User-requested)은 재빠르게 화면에 표시되는 foreground로 오게됩니다.

시스템이 요청한 Scene(System-requested)은 일반적으로 이벤트를 처리할 수 있도록 background로 이동합니다.

예를 들어 시스템이 Scenebackground에서 시작시켜 location event를 처리 할 수 있습니다.

사용자가 앱의 UI를 닫으면, UIKit은 관련된 Scenebackground로 이동시키고 결국은 suspended상태로 이동시킵니다.

UIKit은 언제든지 background 혹은 suspended 상태에 있는 Scene들을 연결을 끊고 리소스를 회수하고 unattached 상태로 반환할 수 있습니다.


Scene 전환을 사용하여 다음 작업들을 수행 합니다.

  • UIKit이 Scene을 앱에 연결할 때, Scene의 초기 UI를 설정하고 Scene이 필요한 데이터를 로드합니다.
  • background상태에 들어오게 되면, 중요한 작업을 완료시키고, 가능한 많은 메모리를 확보하고, 앱 스냅샷을 준비합니다. Preparing Your UI to Run in the Background 참고하세요.
  • Scene의 연결이 끊어지면, Scene과 관련된 리소스들을 정리합니다.
  • Scene관련 이벤트들 외에도, 반드시 UIApplication Delegate객체를 이용하여 앱 실행에 응답을 해야합니다. 앱 실행할 때 어떤 것을 해야할지에 대한 정보들은 다음 Responding to the Launch of Your App참고하세요.



🔔 App기반의 생명주기 이벤트

iOS12 혹은 그 이전 버젼들은 scene을 지원하지 않습니다. 그리고 UIKit은 모든 생명주기 관련 이벤트들을 UIApplicationDelegate 객체에 전달합니다.

밑에 사진을 보면 앱 delegate객체와 관련된 상태 전환을 보여줍니다.

실행 이후, 시스템은 UI가 화면에 표시 되는지 안되는지에 따라 앱을 inactive 혹은 background상태로 전환합니다.

foreground상태로 시작하게 되면, 시스템은 자동으로 앱을 active상태로 전환합니다.

그 후, 앱이 종료되기 전까지 앱의 상태는 activebackground사이에서 수시로 변하게 됩니다.

App 전환을 사용하여 다음 작업들을 수행 합니다.

  • 처음 실행할 때, 앱의 자료구조와 UI들을 초기화 한다.
  • activation일 때, UI설정을 끝내고 유저와 상호작용할 준비를 한다.
  • deactivation상태가 되면, 데이터를 저장하고 앱 동작들을 조용하게합니다.
  • background상태에 돌입하게 되면, 중요한 작업들을 끝내고, 가능한 많은 메모리를 확보하고, 앱 스냅샷을 준비한다.
  • 종료할 때, 모든 작업을 즉시 멈추고 리소스들을 해제한다.


추가적으로 다뤄야 할 중요한 이벤트들

UIApplicationDelegate객체를 사용하여 몇가지 중요한 이벤트들을 다루어야 한다.

  • Memory warnings
  • Protected data becomes available/unavailable
  • Handoff tasks
  • Time changes
  • Open URLs




출처: https://developer.apple.com/documentation/uikit/app_and_environment/managing_your_app_s_life_cycle

profile
iOS & Swift

0개의 댓글