对iOS后台模式最多10分钟运行时间的进一步理解

Posted 纠结的哈士奇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对iOS后台模式最多10分钟运行时间的进一步理解相关的知识,希望对你有一定的参考价值。

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



以上是关于对iOS后台模式最多10分钟运行时间的进一步理解的主要内容,如果未能解决你的问题,请参考以下文章

如何让你的 iOS 应用在后台运行超过 3 分钟?

iOS解决应用进入后台后计时器和位置更新停止的问题

iOS保持线程在后台运行

在后台运行应用程序超过 10 分钟

iOS 8 在 10 分钟后停止在后台流式传输音频

app进入后台申请10分钟活跃时间-b