在app進入后台時,系統初始默認是只有10s的處理時間,但如果10s不夠,我們可以主動申請,網上流傳最多的一個說法是10分鍾。
但這種說法有個前提:
那就是iOS7之前,是這樣
但從iOS7開始,我們申請后,最多只有180s的處理時間(3分鍾),一直頗不理解,為什么變成了3分鍾。
申請方法swift寫法:
var backgroundTaskIdentifier:UIBackgroundTaskIdentifier!
backgroundTaskIdentifier = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({ UIApplication.sharedApplication().endBackgroundTask(self.backgroundTaskIdentifier) if self.backgroundTaskIdentifier != UIBackgroundTaskInvalid{ self.backgroundTaskIdentifier = UIBackgroundTaskInvalid } })
后來看到一個說法是:
系統主動將10分鍾分為N次的分配,總的后台時間還是可以10分鍾的,但我們每次申請,卻只能得到180s的時間,多次以后,總的時間到達10分鍾后,即使再次申請,都是無效的。
那么多次申請怎么實現呢?
我這邊講一個我碰到的情況:
比如app即使一直在后台,但我這邊能夠不定期收到系統回調(我用到了iBeacon),每次收到回調,都能夠將我的應用喚醒10s,理論情況下,這種喚醒系統只會分配給你10s的處理時間,但我又發現10s時間是不夠我處理完所有事情的。
所以我這種情況,正好可以符合這種場景,我只需要在我的回調方法里再次申請一次延長時間,就能夠又得到一次最多180s的處理時間,當然如果你20s就都處理完了,時間是只算20s的。
多次申請直至系統累計到600s的時間,系統才會停止。
這種運用場景,就能充分用到10分鍾,所以記錄下僅供參考。