Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

# 앱의 상태 변화 #19

Open
yoogail105 opened this issue Apr 17, 2022 · 0 comments
Open

# 앱의 상태 변화 #19

yoogail105 opened this issue Apr 17, 2022 · 0 comments

Comments

@yoogail105
Copy link
Owner

앱의 상태 변화

  • 앱은 실행되는 동안 다양한 상태로 변화한다.
    • 화면에 나타났거나, 숨겨졌거나, 시작됐거나, 종료됐거나, ...
    • 전화가 왔을 때 앱이 화면에서 사라지고, 전화 관련 화면이 뜨는 등
  • 운영체제가 처리하는 영역

앱의 상태의 종류(Life Cycle)

  • Not Running
    • 실행되지 않았거나 종료
  • Inactive
    • 포그라운드에서 실행 중, 아무런 이벤트를 받지 않고 있는 상태
  • Active
    • 포그라운드에서 실행 중, 이벤트를 받고 있는 상태
  • Background
    • 백그라운드에 있지만 여전히 코드가 실행되고 있는 상태
    • 대부분은 suspended상태로 이행하는 도중 일시적으로 진입
    • but. 파일 다운로드/업로드 등 시간이 소요되는 작업의 경우 일정 시간동안 이 상태에 머무르게 됨
  • Suspended
    • 앱이 메모리에 유지는 되지만, 실행되는 코드가 없는 상태
    • 메모리가 부족한 상황 → iOS시스템은 포그라운드에 있는 앱의 여유메모리 공간을 확보하기 위해 이 상태에 있는 앱들을 별도의 알림 없이 정리

AppDelegate, 앱 상태 변화 메서드

  • 앱의 상태 변경이 일어날 때마다 앱 객체는 AppDelegate에 정의된 특정한 메서드를 호출한다.
  • application(_:willFinishLaunchingWithOptions:)
    • 앱 구동 후 필요한 초기 실행 과정이 완료되기 직전에 호출
  • application(_:didFinishLaunchingWithOptions:)
    • 앱이 사용자에게 화면으로 표시되기 직전에 호출
    • 앱 실행 후 진행할 커스터마이징, 초기화를 위한 코드 작성
  • applicationDidBecomeActive(_:)
    • 포그라운드 상태(화면 전면에 표시)가 될 때 호출
    • Inactive 상태에 들어가면서 일시 중지되었다가 재시작하는 코드 작성
    • ex. 타이머, 스톱워치 앱: Inactive상태에 들어가면 화면 갱신이 더이상 일어나지 않음 →기옷에서 화면과 남은 시각 등을 갱신해 주어야 한다.
  • applicationDidEnterBackground(_:)
    • 백그라운드 상태 진입했을 때 호출
      • 이 함수 호출: 미래의 어느 순간에 앱이 종료된다는 의미
        → 사라지면 안되는 데이트 미리 저장, 공유 자원 해제, 다시 실행될 때 현재 상태로 복구할 때 필요한 정보 저장하는 코드 작성
  • applicationWillTerminate(_:)
    • 앱이 종료되기 직전에 호출
    • 사용자 데이트 등 종료 전에 한 번 더 저장하는 것이 좋음
  • 이 외에도 다양한 상태 변화에 대응하기 위한 코드 작성 가능
    • UIAppDelegateProtocol

🔖 출처

  • 꼼꼼한 재은씨의 Swift: 기본편 [2.1.3 앱의 상태 변화]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant