3 回答

TA貢獻1880條經驗 獲得超4個贊
您不應該通過設置計時器來解決此問題,因為不允許您在后臺執行任何代碼。想象一下,如果用戶在此期間或在其他一些極端情況下重新啟動iPhone,將會發生什么情況。
使用AppDelegate 的applicationDidEnterBackground:和applicationWillEnterForeground:方法來獲取所需的行為。它更加健壯,因為當您的應用由于重啟或內存不足而被完全殺死時,它也將起作用。
您可以節省當應用程序進入后臺時計時器將在下一次觸發的時間,并檢查當應用程序返回到前臺時是否應采取措施。也可以使用這種方法停止并啟動計時器。當您的應用運行時,您可以使用計時器在適當的時候觸發更新。

TA貢獻1890條經驗 獲得超9個贊
如果您或其他人正在尋找如何在Swift的后臺運行NSTimer的方法,請將以下內容添加到您的App Delegate中:
var backgroundUpdateTask: UIBackgroundTaskIdentifier = 0
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
return true
}
func applicationWillResignActive(application: UIApplication) {
self.backgroundUpdateTask = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({
self.endBackgroundUpdateTask()
})
}
func endBackgroundUpdateTask() {
UIApplication.sharedApplication().endBackgroundTask(self.backgroundUpdateTask)
self.backgroundUpdateTask = UIBackgroundTaskInvalid
}
func applicationWillEnterForeground(application: UIApplication) {
self.endBackgroundUpdateTask()
}
干杯!
- 3 回答
- 0 關注
- 442 瀏覽
添加回答
舉報