[iOS] App Life Cycle(AppDelegate, SceneDelegate)

Youngwoo Lee·2021년 5월 8일
0

iOS

목록 보기
12/46
post-thumbnail

App Life Cycle

iOS Developer Document - Managing Your App's Life Cycle

Respond to system notifications when your app is in the foreground or background, and handle other significant system-related events.

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

Overview

앱의 현재 상태는 무엇을 할 수 있는지 혹은 무엇을 할 수 없는지 결정할 수 있다. 예를 들어, foreground 상태에 있는 앱은 유저의 집중을 받고 있다. 그래서 CPU를 포함한 시스템 자원에 대한 우선순위가 높다. 대조적으로 background 상태에 있는 앱은 가능한 적은 일을 수행한다. 왜냐하면 화면에 나타나지 않기 때문이다. 우리는 앱이 다른 상태로 이전될 때, 적절한 행동을 적용해야만 한다.

앱의 상태가 변화할 때, UIKit은 적절한 delegate 메소드를 호출함으로써 상태 변화를 알릴 것이다.

iOS 13 이상

  • scene-based로 하는 App에서는 UISceneDelegate 객체를 사용해 life-cycle 이벤트에 반응한다.

iOS 12 이하

  • UIApplicationDelegate 객체를 사용해 app의 생명주기 이벤트를 받을 수 있다

Respond to Scene-Based Life-Cycle Events

만약에 앱이 scene을 지원한다면, UIKit은 각각의 life-cycle event들을 분리해서 전달한다. scene은 디바이스에서 진행되는 앱의 UI 인스턴스를 나타냅니다. 유저는 multi-scene을 생성할 수 있으며, 각 scen은 자신만의 life cycle을 가집니다. 각각의 scene은 다른 실행 state를 가질 수 있습니다. 예를 들어, 하나의 scene은 foreground에 있지만, 다른 scene들은 background 혹은 suspended에 있을 수 있습니다.

NOTE
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.

아래 그림은 scene의 state 전환에 대해서 나타내고 있습니다. 유저 혹은 시스템이 새로운 scene을 요구할 때, UIKit은 scene을 생성하고 unattached 상태가 되게 합니다. 유저가 요구한 scene은 빠르게 foreground로 변경되며, screen에 나타납니다. 시스템이 요구한 scene은 보통 background로 전환되며 event를 진행합니다. 예를 들어서, 시스템이 백그라운드에서 scene을 시작하여 location 이벤트를 처리할 수 있습니다. 사용자가 앱의 UI를 해제하면 UIKit은 연결된 scene을 백그라운드 상태로 이동한 후 suspended상태로 전환합니다. UIKit은 background 혹은 suspended scene을 언제든지 해제하고 리소스를 회수하여 해당 장면을 미연결 상태로 되돌릴 수 있습니다.

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

  • UIKit이 scene을 연결할 때, UI를 초기화하고 scene에 필요한 데이터를 로드합니다.
  • foreground-active 상태로 전환될 때, UI를 설정하고 유저와의 상호작용을 준비합니다.
  • foreground-active 상태를 종료하면 데이터를 저장하고 앱의 동작을 정지합니다.
  • background 상태로 전환되면, 중요한 작업을 완료하고 가능한 많은 메모리를 확보한 후 스냅샷을 준비합니다.
  • scene 연결 해제 시 scene과 관련된 공유 리소스를 정리합니다
  • scene 관련 이벤트 외에도 UIApplicationDelegate 개체를 사용하여 앱 시작에도 응답해야 합니다.

Respond to App-Based Life-Cycle Events

iOS 12 이전 버전 및 scene을 지원하지 않는 앱에서 UIKit은 모든 라이프 사이클 이벤트를 UIApplicationDelegate 객체에 전달합니다. AppDelegate는 별도의 화면에 표시되는 창을 포함하여 앱의 모든 창을 관리합니다. 결과적으로 앱 상태 전환은 외부 디스플레이의 콘텐츠를 포함하여 앱의 전체 UI에 영향을 줍니다.

아래 그림은 AppDelegate와 관련된 state 전환을 보여줍니다. 실행 후 시스템은 UI가 화면에 표시되려고 하는지 여부에 따라 프로그램을 Inactive 혹은 background 상태로 전환됩니다. foreground로 실행 시 시스템은 자동으로 app을 active 상태로 전환합니다. 이후 앱이 종료될 때까지 상태는 active와 background 사이에서 변동됩니다.

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

  • 실행 시 앱의 데이터 구조 및 UI를 초기화합니다.
  • 활성화 시 UI구성을 완료하고 사용자와 상호 작용할 준비를 합니다.
  • Deactivation 시(background 상태로 전환될 경우) 데이터를 저장하고 앱의 동작을 정지합니다.
  • background 상태로 전환되면 중요한 작업을 완료하고 가능한 많은 메모리를 확보한 후 스냅샷을 준비합니다.
  • 앱 종료 시에는 모든 작업을 즉시 중지하고 공유 리소스를 해제합니다. applicationWillTerminate(_:)

iOS 12 이전 버전과 Scene-based App이 아닌 App 에서는 UIKit의 모든 수명주기 이벤트를 UIApplicationDelegate 객체에 전달한다.


Respond to Other Significant Events

앱은 Life cycle event 처리 외에도 다음 표에 나열된 이벤트를 처리할 수 있도록 준비해야 합니다. 이러한 이벤트의 대부분을 처리하려면 UIApplicationDelegate 개체를 사용하세요. 경우에 따라서 앱의 다른 부분에서 응답할 수 있도록 Notification을 사용하여 이러한 알림을 처리할 수도 있습니다.

Memory warnings
앱의 메모리 사용이 너무 높을 경우 받게 된다. 앱이 사용하는 메모리 양을 줄여라

Protected data becomes available/unavailable
디바이스을 잠그거나 해제하는 경우,applicationProtectedDataDidBecomeAvailable(_:)applicationProtectedDataWillBecomeUnavailable(_:)가 호출된다.

등등


나중에 읽어볼 링크들)
https://medium.com/swlh/handling-background-tasks-in-ios-13-67f717d94b3d

참고)
https://velog.io/@wonhee010/App-Life-Cycle#scene-based-life-cycle-events
https://velog.io/@dev-lena/iOS-AppDelegate와-SceneDelegate
https://velog.io/@lena_/AppDelegate-SceneDelegate
https://developer.apple.com/videos/play/wwdc2019/258/

profile
iOS Developer Student

0개의 댓글