나는 백그라운드에서 타이머를 실행할 필요가 없다는 것을 기꺼이 알았습니다. 필요한 것은 일시 중지 된 동안 경과 된 시간을 아는 것입니다. 빈 사운드 파일을 재생하는 것보다 리소스를 훨씬 효율적으로 사용할 수 있습니다.
얼마나 많은 시간이 경과했는지 확인하려면 applicationWillResignActive
과 applicationDidBecomeActive
을 사용하십시오. 먼저 타이머의 fireDate을 저장하고 applicationWillResignActive
func applicationWillResignActive(application: UIApplication) {
guard let t = self.timer else { return }
nextFireDate = t.fireDate
t.invalidate()
}
다음에 무효의 fireDate에 현재 시간을 비교하여 applicationDidBecomeActive
에 타이머 남은 시간을 결정 당신은 applicationWillResignActive
전화에 저장 :
당신이이 일을 반복해야하는 경우
func applicationDidBecomeActive(application: UIApplication) {
guard let n = nextFireDate else { return }
let howMuchLonger = n.timeIntervalSinceDate(NSDate())
if howMuchLonger < 0 {
print("Should have already fired \(howMuchLonger) seconds ago")
target!.performSelector(selector!)
} else {
print("should fire in \(howMuchLonger) seconds")
NSTimer.scheduledTimerWithTimeInterval(howMuchLonger, target: target!, selector: selector!, userInfo: nil, repeats: false)
}
}
, 바로 타이머가 발사 한 횟수를 알아 내기 위해 수학을하는 동안 백그라운드에서
let howManyTimes = abs(howMuchLonger)/repeatInterval
시간 ttp : //stackoverflow.com/questions/8415870/scheduled-nstimer-when-app-is-in-background – rakeshbs
왜 백그라운드에서 실행할 타이머가 _ 필요합니까? – matt