在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分钟,所以记录下仅供参考。