我以这种方式通过后台任务的管理构建了我的应用程序:
var updateTimer: NSTimer?
var backgroundTask: UIBackgroundTaskIdentifier = UIBackgroundTaskInvalid
override func viewDidLoad() {
super.viewDidLoad()
// listen for UIApplicationDidEnterBackgroundNotification
NSNotificationCenter.defaultCenter().addObserver(self,
selector: "appDidEnterBackground:",
name: UIApplicationDidEnterBackgroundNotification, object: nil)
}
func reinstateBackgroundTask() {
if updateTimer != nil && (backgroundTask == UIBackgroundTaskInvalid) {
registerBackgroundTask()
}
}
func registerBackgroundTask() {
backgroundTask = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler {
[unowned self] in
self.endBackgroundTask()
}
assert(backgroundTask != UIBackgroundTaskInvalid)
}
func endBackgroundTask() {
NSLog("Background task ended.")
UIApplication.sharedApplication().endBackgroundTask(backgroundTask)
backgroundTask = UIBackgroundTaskInvalid
}
func calculateNextNumber() {
switch UIApplication.sharedApplication().applicationState {
case .Active:
break
case .Background:
NSLog("Background time remaining = %.1f seconds", UIApplication.sharedApplication().backgroundTimeRemaining)
case .Inactive:
break
}
}
func appDidEnterBackground(notification:NSNotification) {
updateTimer?.invalidate()
updateTimer = nil
if backgroundTask != UIBackgroundTaskInvalid {
endBackgroundTask()
}
}
但我不能阻止后台计时器。我想使用这三分钟不是连续的而是分段的,例如使用 5 秒的间隔。我不知道你是否可以做到,让我知道这是否可能以及如何做。谢谢 编辑:我当然没有说清楚。我可以停止和恢复 backgroundTimeRemaining 的剩余时间吗?例子
if the backgroundTimeRemaining == 168.0 {
endBackgroundTask()
}
我试过了,但是不行!!!