3 回答

TA貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個(gè)贊
您不應(yīng)該通過(guò)設(shè)置計(jì)時(shí)器來(lái)解決此問(wèn)題,因?yàn)椴辉试S您在后臺(tái)執(zhí)行任何代碼。想象一下,如果用戶在此期間或在其他一些極端情況下重新啟動(dòng)iPhone,將會(huì)發(fā)生什么情況。
使用AppDelegate 的applicationDidEnterBackground:和applicationWillEnterForeground:方法來(lái)獲取所需的行為。它更加健壯,因?yàn)楫?dāng)您的應(yīng)用由于重啟或內(nèi)存不足而被完全殺死時(shí),它也將起作用。
您可以節(jié)省當(dāng)應(yīng)用程序進(jìn)入后臺(tái)時(shí)計(jì)時(shí)器將在下一次觸發(fā)的時(shí)間,并檢查當(dāng)應(yīng)用程序返回到前臺(tái)時(shí)是否應(yīng)采取措施。也可以使用這種方法停止并啟動(dòng)計(jì)時(shí)器。當(dāng)您的應(yīng)用運(yùn)行時(shí),您可以使用計(jì)時(shí)器在適當(dāng)?shù)臅r(shí)候觸發(fā)更新。

TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個(gè)贊
如果您或其他人正在尋找如何在Swift的后臺(tái)運(yùn)行NSTimer的方法,請(qǐng)將以下內(nèi)容添加到您的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 關(guān)注
- 441 瀏覽
添加回答
舉報(bào)