App의 Life Cycle 다루기

delma·2020년 3월 10일
3

iOS

목록 보기
8/16
post-thumbnail

iOS App Life Cycle 에 대해 이해하고자 번역한 글입니다. (출처)


App Life Cycle

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


Overiew

앱의 현재 상태에 따라 할 수 있는 것과 할 수 없는 것이 결정된다. 예를들어, 포어그라운드 앱은 사용자의 관심을 끌기 때문에 이것은 CPU를 포함한 시스템 리소스보다 우선 순위가 높다.
반대로, 백그라운드 앱은 offscreen이기 때문에 가능한한 적은 작업을 수행해야 하고, 되도록 아무것도 수행하지 않아야 한다. 앱의 상태가 변경될 때 그에 따라 적절한 동작을 적용해야 한다.

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

  • iOS 13과 이후 버전은 UISceneDelegate scene 기반 앱에서 라이프 사이클 이벤트에 응답하기 위해 객체를 사용한다
  • iOS 12와 이전 버전은 라이프 사이클 이벤트에 응답하기 위해 UIApplicationDelegate 객체를 사용한다

Note
앱에서 scene support를 활성화하면 iOS는 iOS 13 이후 버전에서는 항상 scene delegate를 사용한다. iOS 12 이전 버전에서는 시스템이 app delegate를 사용한다


Respond to Scene-Based Life-Cycle Events

여러 앱을 띄워놓은 상황

앱이 scene을 지원하면, UIKit은 각각에 대해 별도의 라이프 사이클 이벤트를 전달한다. Scene은 기기에서 실행되는 앱 UI의 한 인스턴스를 나타낸다. 유저는 각각의 앱에 대해 여러개의 화면을 만들 수 있고 개별적으로 표시하거나 숨길 수도 있다. 왜냐하면 각각의 scene은 자신만의 라이프사이클이 있기 때문에 다 다른 실행 상태에 있을 수 있다. 예를 들어 한 scene이 포어그라운드에 있는동안 다른것들은 백그라운드에 있거나 중단되어있을 수 있다.

Important
Scene 서포트는 opt-in 기능이다. 기본 지원을 활성화 하려면 Info.plist파일에 Specifying the Scenes Your App Supports에 설명된대로 UIApplicationSceneManifest 키를 추가하면 된다.

아래 그림은 Scene의 상태 전환을 보여준다. 유저나 시스템이 앱에 새로운 씬을 요청할 때, UIKit은 그것을 생성해 연결되지 않은 상태로 만든다.
유저 요청 화면은 재빠르게 foreground로 이동해 화면에 나타난다.
시스템 요청 화면은 일반적으로 이벤트를 처리할 수 있도록 background로 이동한다.

예를 들어, 시스템이 위치 이벤트를 처리하기 위해 백그라운드에서 화면을 시작한다고 하자. 사용자가 앱의 UI를 닫을 때, UIKit은 관련된 씬을 백그라운드로, 결국 중단된 상태로 이동시킨다. UIKit은 언제든지 백그라운드나 중단된 씬과의 연결을 끊어 리소스를 회수해 해당 씬을 연결되지 않은 상태로 되돌릴 수 있다.

아래의 작업을 수행하기 위해 장면 전환(scene transitions)을 사용하면 된다

  • UIKit이 앱과 화면을 연결할 때, 씬의 초기 UI를 구성하고 씬에 필요한 데이터를 로드한다
  • foreground-active 상태로 전환 될 때, 사용자와 상호작용할 준비를 하고 UI를 구성한다. Preparing Your UI to Run in the Foreground 참조.
  • foreground-active 상태를 벗어나면 데이터를 저장하고 앱의 동작을 조용히(quiet) 한다. Preparing Your UI to Run in the Background 참조.
  • background 상태로 진입하면 중요한 작업은 완료하고 가능한 많은 메모리를 확보한다. 그리고 앱의 스냅샷을 준비한다. Preparing Your UI to Run in the Background
  • 씬 연결이 끊어지면 씬과 관련된 공유 리소스를 정리한다.
  • 씬과 관련된 이벤트 외에도 UIApplicationDelegate 객체를 이용한 앱의 실행에 응답해야 한다. 앱 시작시 수행 할 정보에 관해서는 Responding to the Launch of Your App참조



Respond to App-Based Life-Cycle Evnets

한 앱을 띄워놓은 상황
iOS 12와 이전 버전 및 Scene을 지원하지 않는 앱에서 UIKit은 모든 라이프 사이클 이벤트를 UIApplicationDelegate 객체로 보낸다.
앱 델리게이트는 별도의 화면에 표시된 창을 포함해 앱의 모든 창(windows)를 관리한다. 결과적으로 앱 상태 전환(app state transitions)은 외부 디스플레이의 컨텐츠를 포함해 전체 UI에 영향을 준다.

아래 그림은 앱 델리게이트 객체와 관련된 상태 전환을 보여준다. 실행 후, 시스템은 UI가 화면에 표시될지 여부에 따라 앱을 inactive나 background 상태로 둔다. foreground로 시작할 때 시스템은 자동으로 앱을 active상태로 전환한다. 그 후, 앱이 종료될때까지 state는 active와 background 사이에서 변동한다.

아래의 작업을 수행할때 앱 전환을 사용하라



Respond to Other Significant Events

라이프 사이클 이벤트를 다루는 것 외에도 앱은 아래 표에 있는 것들을 다루기 위해 준비해야 한다. 대부분의 이벤트를 다루기 위해 UIApplicationDelegate 를 사용한다. 어떤 경우에선 알림을 사용해 앱의 다른 부분에서 응답하도록 허락할 수 있다.

profile
🌐Code makes world better

0개의 댓글