亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當應用程序在后臺運行時預定NSTimer?

當應用程序在后臺運行時預定NSTimer?

iOS
鳳凰求蠱 2019-11-12 10:27:03
當應用程序在后臺運行時,人們如何處理預定的NSTimer?假設我每小時更新一次我的應用程序中的內容。updateTimer = [NSTimer scheduledTimerWithTimeInterval:60.0*60.0 target:self selector:@selector(updateStuff) userInfo:nil repeats:YES];在后臺時,此計時器顯然不會觸發(?)。當用戶回到應用程序時該怎么辦?計時器是否仍在運行同一時間?如果用戶在一個小時后回來,將會發生什么。它會在錯過的所有時間觸發還是會等到下一個更新時間?我希望它執行的操作是在應用程序啟動后立即更新,如果它應該觸發的日期是過去的話。那可能嗎?
查看完整描述

3 回答

?
慕村225694

TA貢獻1880條經驗 獲得超4個贊

您不應該通過設置計時器來解決此問題,因為不允許您在后臺執行任何代碼。想象一下,如果用戶在此期間或在其他一些極端情況下重新啟動iPhone,將會發生什么情況。


使用AppDelegate 的applicationDidEnterBackground:和applicationWillEnterForeground:方法來獲取所需的行為。它更加健壯,因為當您的應用由于重啟或內存不足而被完全殺死時,它也將起作用。


您可以節省當應用程序進入后臺時計時器將在下一次觸發的時間,并檢查當應用程序返回到前臺時是否應采取措施。也可以使用這種方法停止并啟動計時器。當您的應用運行時,您可以使用計時器在適當的時候觸發更新。


查看完整回答
反對 回復 2019-11-12
?
當年話下

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()

}

干杯!


查看完整回答
反對 回復 2019-11-12
  • 3 回答
  • 0 關注
  • 442 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號