[iOS] App LifeCycle

doyeonjeong_·2022년 7월 16일
0

iOS

목록 보기
2/3
post-thumbnail

생명주기 (Life Cycle)

  • 어떤 프로그램이 최초 실행과 종료 사이에 갖는 상태와 그 상태들 사이의 전이
  • 프로그램의 상태에 따라 현재 할 수 있는것이 결정됨

앱의 생명주기 (App Life Cycle)

  • 앱의 실행과 종료 사이에 존재하는 상태들 또는 시스템 이벤트에 의해 상태가 전환되는 일련의 과정
  • 실행 종료 외에 앱이 눈에 보이는 Foreground 상태와 보이지 않는 Background 상태로 구분한다.

앱의 5가지 상태

1. Not Running

  • 앱이 실행되지 않았거나 종료된 상태
application(_:willFinishLaunchingWithOptions:) {
	// 앱 실행시 최초 실행 코드 : 주요 객체를 생성하고 앱 준비가 끝나기 직전에 호출됨
}
applicationDidFinishLaunching(_:) {
	// 앱 초기화 코드 : 앱 실행 준비 끝난 후 사용자에게 보이기 직전에 호출됨
}
applicationDidFinishLaunching(_:) {
	// 앱이 종료되기 직전에 호출됨
}

2. Inactive

  • 앱이 실행 중이지만, 아무런 이벤트를 받지 않는 상태
  • 아주 잠깐만 머무르는 비활성화 상태라고 할 수 있다.
  • 최초 앱 실행시 또는 문자 알림 등 일시적 이벤트로 인해 잠시 현재 앱이 정지되어 있는 상태라고 할 수 있다.
sceneWillEnterForeground(_:) {
	// foreground로 들어가기 직전에 호출됨
}
sceneWillResignActive(_:) {
	// App Switcher 모드 (홈 버튼 동작 상태)
}

3. Active

  • 앱이 실행 중이며 이벤트가 발생한 상태
  • 우리가 앱을 사용하는 동안이라고 볼 수 있다. (Running)
sceneDidBecomeActive(_:) {
	// 앱 실행 직전, 마지막으로 준비할 코드 : 활성화 상태 진입 직후 호출됨
}

4. Background

  • 앱이 백그라운드에 있고 실행되는 코드가 있는 상태 (Background Running)
  • 이 상태에서 일정 시간(약 5분)이 지나면 Suspended 상태로 바뀐다.
  • 그리 길게 유지되지 않기 때문에 Inactive 와 비슷한 역할을 한다고 볼 수 있을 것 같다.
sceneDidEnterBackground(_:) {
	// Suspended 상태가 되기 전 중요 데이터 저장 등을 수행
}

5. Suspended

  • 앱이 백그라운드에 있고 실행되는 코드가 없는 상태
  • 보통 홈 버튼을 눌러 앱이 백그라운드에 진입하면 이벤트가 없기 때문에 자동으로 이상태가 된다.
  • 메모리상에 존재하지만 아무것도 실행하지 않았기 때문에 배터리 소모가 없다.
  • 메모리가 부족하면 이 상태의 앱이 별도의 알림 없이 종료될 수 있다.
  • 따로 호출되는 메서드 없음

갑자기 SceneDelegate? 🤔

간단히 말하면 iOS 13 버전부터 추가된 UI 생명 주기 관리 클래스이다!

iOS12 버전까지는 하나의 앱이 하나의 윈도우만 사용해왔기 때문에
AppDelegate 클래스가 UI 생명주기까지 관리했다.

iOS13 버전부터는 하나의 앱이 여러개의 윈도우를 사용할 수 있게 되어
SceneDelegate라는 UI 생명 주기 관리 클래스가 등장한 셈이다!
(위에 등장한 코드들은 iOS 13 이상을 위한 코드만 다루었다.)


Reference

profile
블로그 이사중 🚚 byukbyak.tistory.com

0개의 댓글