AppDelegate 에도 applicationDidBecomeActive 가 있고
SceneDelegate 에도 sceneDidBecomeActive가 있다.
하지만 AppDelegate의 applicationDidBecomeActive는 작동하지 않는다.
?? 아비규환이다. 내 머리속 혼돈이 지나가고 있다. 정리할 필요가 있다. 정리해보자
Life Cycle
우선 3가지 분류와 분류 속 5가지 상태가 있음을 알아야한다.
3가지 분류
Foreground
Background
그 외
5가지 상태
Foreground
Active
Inactive
Background
- Background
그 외
Not running
Suspended
앱 실행
Not Running -> Foreground(진입) -> Active
willFinishLaunchingWithtOptions | AppDelegate |
didFinishLaunchingWithOptions | AppDelegate |
willConnectTo | SceneDelegate |
sceneWillEnterForeground | SceneDelegate |
sceneDidBecomeActive | SceneDelegate |
먼저 Scene이 작동되기 전에 당연하게 App 이 실행되어야 함
그래서 AppDelegate의
willFinishLaunchingWithOptions
-> didFinishLaunchingWithOptions
가 실행된다.
그리고 SceneDelegate 함수들이 작동한다.
willConnectTo
-> sceneWillEnterForeground
-> sceneDidBecomeActive
가 실행된다.
여기서 주의해야 할 점은 Active가 되기 위해서는 반드시 InActive를 거쳐야 한다는 것이다.
앱 Background로 돌리기
sceneWillResignActive | SceneDelegate |
sceneDidEnterBackground | SceneDelegate |
앱 실행시와 마찬가지로 Active는 반드시 InActive로 바뀌고 난 후에 상태 변경이 가능하다.
앱 종료
시뮬레이션에서 앱 종료 시연을 하려고 했는데 함수 실행이 안된다. 왜 그런지 아시는 분? ㅠㅠ
비정상적인 종료만 해서 그런가 ㅠ.ㅠ 하지만 이론적으로만 설명!
applicationWillTerminate | AppDelegate |
앱이 백그라운드에 들어간 후에 메모리가 줄어든다면 iOS에서 사용하지 않는 앱을 Kill 한다.
그럴 때 applicationWillTerminate
를 실행한다.
공부하면서 느낀 궁금증
왜 AppDelegate 함수는 실행 안되지?
생각해보면 AppDelegate에도 Foreground, Background 관련된 메소드가 있었다.
하지만 진작 실행은 안된다 왜일까??
정답은 공식문서에 있었음
scene을 사용한다면 UIKit은 이 메소드를 부르지 않는다.
SceneDelegate에서 설정해라. 라는 말이다.
Inactive의 기능은 무엇일까?
Foreground의 Inactive는 말 그대로 앱이 Foreground(전반)에 있지만 active 하지 못할 때이다.
시리가 켜지거나
전화 알림
Alert 뜨는 상황
즉, 사용자로부터 이벤트를 받지 못하는 상황이다.