我知道当您后台应用程序时,计时器会停止运行。然而,当你从后台回来时,行为是什么?定时器是否保持原来的状态fireDate
?
我遇到了一个问题,即从后台返回并设置十分钟后触发的 NSTimer 时,有时我会立即让计时器在之前触发applicationWillEnterForeground:
甚至被称为。当它不着火时,并且applicationWillEnterForeground:
被调用,我有一些逻辑来通过比较计时器的时间来检查 10 分钟是否已经过去fireDate
然而,到当前日期,即使已经过去了 10 分钟,它似乎总是给我一个从当前日期算起的未来约 525 秒的值。
我的理论如下:
An NSTimer
只要您没有错过预定时间,就会在从后台返回时触发计时器。 (在本例中,我们将计时器安排为 10 分钟,只要您在后台运行 10-20 分钟,它就会在重新进入应用程序时触发。)
如果超过了这个时间,它就不会触发,而是在您返回时为将来的同一时间段安排另一个计时器。 (又名:如果您使用 10 分钟计时器在后台运行了 20 多分钟,那么当您返回时,它会在您返回应用程序后的 10 分钟内安排计时器。)
有人有关于这种行为的任何文档吗?我的理论纯粹基于观察,关于背景时发生的情况的文档要么严重缺乏,要么我无法找到它。
您正确地观察了 NSTimer 的行为方式。
如果您现在创建一个应该每十分钟触发一次的计时器,那么从现在开始它将尝试触发十分钟、20 分钟、30 分钟等。如果应用程序在 1 分钟后进入睡眠状态并在 12 分钟后唤醒,计时器将立即触发,然后在 20 分钟时再次触发(不是计时器触发后 10 分钟,而是原始时间后 20 分钟)。
但是,如果计时器完全错过了一个事件,然后下一个计时器事件也迟到了,假设您在 29 分钟后醒来,则 10 分钟的事件将被删除,20 分钟的事件将尽快被触发(29 分钟后)分钟),30 分钟事件在 30 分钟后触发。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)