본문 바로가기
iOS/설명

[iOS] beginBackgroundTask

by Sky Titan 2023. 6. 24.
728x90

 

 

beginBackgroundTask(expirationHandler:) | Apple Developer Documentation

Marks the start of a task that should continue if the app enters the background.

developer.apple.com

beginBackgroundTask

  • 앱이 Background로 진입한 이후에도 지속되어야할 작업들을 표시하는 함수
  • expirationHandler:
    • 남은 백그라운드 지속 시간이 0이 되어서 종료되기 직전에 남은 작업을 처리할 수 있게 해주는 block
  • iOS앱은 백그라운드로 넘어가고 수초 이내에 Suspended 상태로 넘어가서 이전에 실행하던 코드들을 전부 중단시키는데, Suspended 상태로의 진입을 지연시키는 함수
    • 예시) 네트워크 Request를 보내고 Response가 아직 오기전에 Suspended상태로 넘어가는 것을 방지
  • 시스템 상태에 따라 backgroundRemainingTime이 달라지는데 최대 3분정도 지속 가능

 

endBackgroundTask

  • beginBackgroundTask로 표시된 작업이 완료된 후 호출해주어 앱이 예정대로 Suspended 상태로 진입하게 해주는 함수

 

테스트

  • 앱이 background로 진입 시 타이머를 걸고 Suspended 상태 진입을 10초 정도까지 지연시킴
    func sceneDidEnterBackground(_ scene: UIScene) {
        timer?.invalidate()
        identifier = UIApplication.shared.beginBackgroundTask()
        timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(backgroundTask), userInfo: nil, repeats: true)
        
    }
    
    @objc
    func backgroundTask() {
        second += 1
        print("second: \(second)")
        
        if second == 10, let identifier = identifier {
            UIApplication.shared.endBackgroundTask(identifier)
        }
    }

 

728x90

'iOS > 설명' 카테고리의 다른 글

[iOS] Mirror Struct  (0) 2024.02.24
[iOS] iOS Webview에서 텍스트 복사하는법  (0) 2023.07.15
[iOS] Pod 폴더 충돌 해결  (0) 2023.02.05
[iOS] Podfile.lock  (0) 2023.02.05
[iOS] iOS에서의 Multi-Layer Architecture  (0) 2023.01.23

댓글