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

  • 相关阅读:
    递归--数字黑洞--蓝桥杯
    王、后问题
    递归--简单题--求二项式值
    有问题的题
    LeetCode----994. 腐烂的橘子「深度优先搜索」
    SpringBoot ---- MyBatis Plus 入门
    Spring Boot ---- 整合 MyBatis (注解方式)
    Android笔记
    LeetCode----跳跃游戏Ⅱ「动态规划」
    2020年米哈游秋季招聘程序 B卷编程题
  • 原文地址:https://www.cnblogs.com/yajunLi/p/6066602.html
Copyright © 2020-2023  润新知