Bil*_*l L 5 nstimer nsrunloop ios
我知道当你为应用程序提供后台时,计时器会停止运行.但是,当你从后台回来时的行为是什么?计时器是否保持其原始状态fireDate?
我遇到了一个问题,在从背景返回时,NSTimer设置为在十分钟内启动,有时我applicationWillEnterForeground:甚至会在调用之前立即启动计时器.当它没有触发并且applicationWillEnterForeground:被调用时,我有一些逻辑可以通过比较计时器fireDate和当前日期来检查是否已经过了10分钟,但是,即使已经过了10分钟,它总是给我一个值从当前日期开始约525秒.
我的理论如下:
一个NSTimer在未来从背景后面会触发计时器,只要你还没有比原先计划更多的错过了预定时间.(在这种情况下,我们将计时器安排为10分钟,只要您在后台进行10-20分钟,它将在重新进入应用程序时触发.)
如果超过该值,则不会触发,而是在您返回时在将来的同一时间段内安排另一个计时器.(AKA如果您在10分钟的计时器中已经在后台工作了20多分钟,当您回来时,它会在您返回应用程序之后将计时器安排在10分钟内.)
有没有人有关于这种行为的任何文件?我的理论完全基于观察,关于当背景要么严重缺乏或者我无法找到它时会发生什么的文档.
您正确地观察了NSTimer的行为方式.
如果您现在创建一个应该每十分钟触发一次的计时器,它将尝试从现在开始十分钟,20分钟,30分钟等等.如果应用程序变为一分钟之后入睡12分钟后醒来,计时器会立即再次在20分钟时开火,然后(不定时焙烧后十分钟,但原来的时间后20分钟).
但是如果计时器完全错过一个事件然后下一个计时器事件也迟到,比如说你在29分钟后醒来,那么10分钟的事件就会被取消,那么20分钟的事件会尽快被解雇(29点之后)分钟),30分钟后30分钟的事件被解雇.
| 归档时间: |
|
| 查看次数: |
660 次 |
| 最近记录: |