티스토리 뷰

iOS

[iOS] App's Life Cycle - 앱의 생명주기

Kim_Baechu 2021. 1. 4. 19:47

Managing Your App's Life Cycle

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

 

 

Overview

앱의 현재상태는 무엇을 할 수 있는 지 없는 지를 결정합니다.

예를 들어, 포그라운드에 있는 앱은 유저가 주의하고 있어서 CPU같은 시스템 자원의 우선도가 높습니다.

반면에, 백그래운드의 앱은 가능한 적은 일을 해야하고 화면에 보여지지 않으므로 아마 아무 일도 안할 수도 있습니다.

앱이 상태를 바꿈에 따라서 그 동작을 그에 맞게 조정해야합니다.

 

iOS 13 이상에서는 UISceneDelegate를 사용해서 scene기반의 앱 라이프사이클 이벤트를 처리합니다.

iOS 12 이하에서는 UIApplicationDelegate를 사용합니다.

 

 

Respond to Scene-Based Life-Cycle Events

앱이 scene(씬)을 지원하면 UIKit이 각각의 씬에 라이프사이클 이벤트를 개별적으로 전달합니다.

하나의 씬은 디바이스에서 실행중인 당신의 앱 UI의 하나의 인스턴스입니다.

사용자가 각각의 앱에 여러 개의 씬을 만들고 따로 보여주거나 가릴 수 있습니다.

왜냐하면 각각의 씬은 각자의 라이프 사이클을 가지고 그 라이프 사이클은 실행 상태가 다를 수 있기 때문입니다.

예를 들어, 하나의 씬이 포그라운드에 있으면서 다른 씬은 백그라운드에 있거나 중단되어있을 수 있습니다.

 

씬 지원은 opt-in기능입니다. 기본 지원을 하려면  Specifying the Scenes Your App Supports에 설명된 것처럼 앱의 Info.plist 파일에 UIApplicationSceneManifest 키를 추가해야합니다.

 

 

아래 그림은 씬의 상태 전환을 보여줍니다.

사용자나 시스템이 앱에 새로운 씬을 요청하면 UIKit은 그것을 그리고 unattached 상태로 만듭니다.

사용자가 요청한 씬은 빠르게 포그라운드(화면에 나타나는)로 이동합니다.

 

시스템이 요청한 씬은 전형적으로 백그라운드로 이동하며 이벤트를 처리할 수 있습니다.

예를 들어, 시스템은 위치 이벤트를 실행하기 위해서 백그라운드에서 씬을 실행할 것입니다.

상용자가 앱의UI를 해제하면 UIKit은 관련된 씬을 백그라운드 상태로 이동하고 결국 suspended 상태로 이동합니다.

UIKit은 자원 회수를 위해 언제든지 백그라운드나 서스펜디드 씬 연결을 끊고 그 씬을 unattached상태로 되돌릴 수 있습니다. 

 

다음의 일들을 하기 위해서 씬 전환을 사용하세요.

  • UIKit이 앱에 씬을 연결할 때, 씬이 필요로 하는 데이터를 로드하거나 씬의 초기 UI를 구성하세요.
  • 포그라운드-액티브 상태로 전환할 때, UI를 구성하거나 사용자와 상호작용을 준비하세요.
  • 포그라운드-액티브 상태에서 떠나면, 데이터를 저장하고 앱의 행동을 종료하세요.
  • 백그라운드로 들어가면, 중요한 일을 끝내세요. 가능한 많은 메모리가 자유로워지도록 하고 앱의 스냅샷을 준비하세요.
  • 씬 연결해제 후 씬과 관련된 공유 자원을 지우세요.

Respond to App-Based Life-Cycle Events

iOS12 이전에는 앱이 씬을 지원하지 않았고 UIKit은 모든 라이프 사이클 이벤트를 UIApplicationDelegate에 전달했습니다.

앱 델리게이트는 분리된 화면에 표시되는 윈도우부터 모든 앱의 윈도우를 관리했습니다.

결과적으로 앱의 상태 전환은 디스플레이 밖의 컨텐츠를 포함한 앱의 전체 UI에 영향을 줬습니다.

 

아래 그림은 앱 델리게이트 오브젝트를 포함하는 상태 변화입니다.

실행 후에, 시스템은 앱을 UI가 스크린에 나타날찌 여부에 따라 inactive나 백그라운드 상태로 둡니다.

포그라운드로 시작하면 시스템이 자동으로 앱을 active상태로 앱을 전환합니다.

이 후 앱은 종료될 때까지 active 와 background를 왔다갔다합니다.

다음의 일들을 하기 위해서 앱 전환을 사용하세요.

  • 시작할 때, 앱의 데이터 structure와 UI를 초기화하세요.
  • 활성화 할 때, UI 구성을 끝내고 유저와 상호작용을 준비하세요.
  • 비활성화 하면, 데이터를 저장하고 앱의 행동을 종료하세요.
  • 백그라운드 상태로 가면, 중요한 일을 끝내세요. 가능한 많은 메모리가 자유로워지도록 하고 앱의 스냅샷을 준비하세요.
  • 종료 후,모든 작업을 즉시 끝내고 관련된 공유 자원을 방출하세요.

Respond to Other Significant Events

라이프 사이클 이벤트를 다루기 위해서, 앱은 다음 테이블에 있는 것들도 준비해야합니다. UIApplicationDelegate를 사용해서 이 이벤트들을 다루세요.

 

Memory warnings

앱의 메모리 사용이 너무 높다는 경고를 받으면 앱이 사용하는 메모리를 줄이세요.
 Responding to Memory Warnings

Protected data becomes available/unavailable

사용자가 디바이스를 잠그거나 풀었을 때 applicationProtectedDataDidBecomeAvailable(_:) 
applicationProtectedDataWillBecomeUnavailable(_:)

Handoff tasks

NSUserActivity object 처리를 받았을 때
application(_:didUpdate:)

Time changes

여러 시간 변화를 받았을 때 
applicationSignificantTimeChange(_:)

Open URLs

앱이 리소스를 열어야한다고 했을 때
application(_:open:options:)

댓글
공지사항