Jos*_*nti 2 timer background-process swift
所以我陷入困境,我正在构建一个宾果应用程序,我希望应用程序在应用程序进入后台时停止计时器。我的代码看起来像这样
var timer = Timer()
func ViewDidLoad(){
// other stuff
timer = Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(numberPicker), userInfo: nil, repeats: true)
}
Run Code Online (Sandbox Code Playgroud)
在我读过的其他帖子中,我看到人们建议将计时器定义为弱变量。当我尝试这个时,我的应用程序在尝试设置计时器时崩溃了。
现代解决方案是DispatchSourceTimer可以暂停和恢复的。
两个通知观察者还使用基于现代swifty块的 API,不需要@objc。
let timer = DispatchSource.makeTimerSource(queue: DispatchQueue.global())
override func viewDidLoad() {
super.viewDidLoad()
timer.schedule(deadline: .now() + .seconds(5), repeating: 5.0)
timer.setEventHandler {
print("Timer fired")
}
NotificationCenter.default.addObserver(forName: UIApplication.didEnterBackgroundNotification, object: nil, queue: .main) { [weak self] _ in
self?.timer.suspend()
}
NotificationCenter.default.addObserver(forName: UIApplication.didBecomeActiveNotification, object: nil, queue: .main) { [weak self] _ in
self?.timer.resume()
}
timer.activate()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1277 次 |
| 最近记录: |