본문 바로가기
🍎 iOS/UIKit

[UIKit] 앱의 라이프 사이클

by hyebin (Helia) 2022. 3. 22.

앱은 현재 상태에 따라서 할 수 있는 작업과 할 수 없는 작업이 결정됩니다.

개발자는 앱의 상태가 변화할 때마다 앱의 동작을 적절하게 조절해주어야 해야 합니다.

UIKit은 delegate 객체의 메서드를 적절히 호출하여 앱의 상태가 변화했음을 알려줍니다.

 


Scene 기반 라이프 사이클 이벤트에 대응

Scene을 지원하는 앱에서 UIKit은 라이프 사이클 이벤트가 발생할 때마다 각각의 이벤트를 전달합니다.

  • Scene:  기기에서 실행되는 앱 UI의 인스턴스 하나

용자는 각 앱에서 여러 개의 scene을 생성할 수 있으며, 각각의 scene을 독립적으로 숨기거나 보이게 할 수 있습니다.

각 scene은 고유의 라이프 사이클을 가지고 있기 때문에 서로 다른 실행 상태에 있을 수 있습니다.

Scene은 기본 옵션이 아니라 따로 설정을 해야 사용 가능합니다.
기본 설정을 활성화 하기 위해서는 Info.plist 파일에서 UIApplicationSceneManifest 키를 설정해야 합니다.

다음 그림은 scene들의 상태 전환을 보여줍니다.

  • 사용자나 시스템이 앱에 새로운 scene을 요청하면 UIKit은 scene을 생성하고 Unattached 상태로 둡니다. 
  • 사용자가 요청한 scene은 빠르게 foreground로 전환되어 화면에 나타납니다.
  • 시스템이 요청한 scene은 보통 background로 이동하여 이벤트를 처리합니다.
  • 사용자가 앱의 UI를 닫으면 UIKit은 관련된 scene을 background 상태로 이동시키고, 최종적으로는 중단 상태로 만듭니다.
  • UIKit은 리소스 반환을 요구받으면 언제든지 backgroun 또는 중단된 scene의 연결을 끊고 unattached 상태로 되돌려놓을 수 있습니다.

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

  • UIKit이 scene을 앱에 연결할 때 scene의 최초 UI를 구성하고 scene에 필요한 데이터를 로드합니다.
  • Forground-active 상태로 전환될 때 UI를 구성하고 사용자와 상호작용할 준비를 합니다.
  • Foreground-active 상태를 벗어나면 데이터를 저장하고 앱 동작을 중단시킵니다.
  • Background 상태에 진입 시 중요한 작업을 끝마치고, 최대한 많은 메모리를 확보하고, 앱 스냅샷을 준비합니다.
  • Scene의 연결이 끊기면 scene과 관련된 공유 리소스를 정리합니다.
  • scene과 관련된 이벤트 외에, 앱이 실행될 때에도 UIApplicationDelegate를 통해 응답을 해야 합니다.

 

App 기반 라이프 사이클 이벤트에 대응하기

iOS 12 버전 이하와  scene을 지원하지 않는 앱에서, UIKit은 모든 라이프 사이클 이벤트를 UIApplicationDelegate 객체를 통해 전달합니다. App delegate는 분리된 스크린에 표시되는 것까지 포함하여 앱의 모든 window를 관리합니다.

결과적으로, 앱 상태 전환은 외부 디스플레이에 표시되는 콘텐츠를 포함하여 앱의 전체 UI에 영향을 줍니다.

 

다음 그림은 app delegate 객체와 관련된 상태 전환을 보여주고 있습니다.

  • 실행 이후, 시스템은 앱이 스크린에 나타나는지 여부에 따라서 앱을 비활성 또는 background 상태로 만듭니다.
  • foreground로 실행할 시, 시스템은 자동으로 앱을 활성화 상태로 전환시킵니다.
  • 그 이후 종료될 때까지 앱은 active와 background 상태 사이를 오갑니다.

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

  • 실행 시 앱의 데이터 구조화 UI를 초기화합니다.
  • 활성화 시 UI 구성을 마치고 사용자와의 상호작용을 준비합니다.
  • 비활성화 시 데이터를 저장하고 앱의 동작을 중단합니다.
  • Background 상태로 전환 시 중요한 작업을 마치고, 최대한 많은 메모리를 확보하고, 앱 스냅샷을 준비합니다.
  • 종료 시 모든 작업을 즉시 중단하고 공유 리소스를 해제합니다.

 

기타 중요한 이벤트에 응답하기

앱은 라이프 사이클 이벤트뿐만 아니라 다음 테이블에 나열된 이벤트들도 처리할 준비가 돼있어야 합니다.

UIApplicationDelegate 객체를 사용하여 이벤트의 대다수를 처리합니다.

경우에 따라 notification을 사용하여 처리할 수 있습니다.

Memory Warning 앱의 메모리 사용량이 너무 많을 경우 받는 메세지
Protected data becomes available/unavailable
사용자가 기기를 잠그거나, 잠금을 해제할 때 받는 메세지
Handoff tasks NSUserActivity 객체의 처리가 필요할 때 받는 메세지
Time changes 통신사 시간 업데이트 등의 이유로 시간 변화가 발생할 때 받는 메세지
Open URLs 앱에서 리소스를 열어야 할 때 수신되는 메세지

 

반응형

'🍎 iOS > UIKit' 카테고리의 다른 글

[UIKit] UIView(3)  (0) 2022.03.30
[UIKit] UIView(2)  (0) 2022.03.28
[UIKit] UIView(1)  (0) 2022.03.25
[UIKit] UIApplication  (0) 2022.03.24
UIKit  (0) 2022.03.21

댓글