对创建后台计时器的情况感到困惑

Posted

技术标签:

【中文标题】对创建后台计时器的情况感到困惑【英文标题】:Confusion with the situation regarding creating background timers 【发布时间】:2011-12-05 18:55:55 【问题描述】:

我的印象是后台任务不可能执行(除了 a)如果它在进入后台后向操作系统请求一点额外的时间来完成任务,或者 b)如果它使用其中之一3 UIBackgroundModes)。

但是这个线程正在谈论创建一个后台计时器

ios4 Create Background Timer

然而,在该线程中没有提到有关后台应用程序的一般限制,因此暗示实际上可以通过计时器实现后台执行。

有人可以澄清一下吗?

如果您有一个应用程序调用 performSelector : withObject: afterDelay 并且延迟时间很长(几个小时或几天),然后应用程序移动到后台并且没有 UIBackgroundMode,那么当该时间过去时会发生什么?

【问题讨论】:

【参考方案1】:

为什么不测试?

我猜你的应用程序(和运行循环)将被挂起,然后在前台再次像往常一样继续,触发你的计时器。如果您阅读了NSTimer 的文档,您可能会了解它的工作原理。

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSTimer_Class/Reference/NSTimer.html

如果计时器的触发时间发生在长时间调用期间或运行循环处于不监视计时器的模式下,则计时器不会触发,直到运行循环下次检查计时器。因此,计时器触发的实际时间可能是计划触发时间之后的很长一段时间。

在这种情况下,他们谈论的是长调用,但暂停/恢复可能会产生类似的效果。

【讨论】:

【参考方案2】:

计时器用于当应用程序处于前台时。从某种意义上说,它是一个后台计时器,它在主线程的“后台”中执行。

【讨论】:

在该线程中,操作声明为要求:“我如何确保线程也保留在后台。”因此,我假设他的问题,因此答复是在这是一个要求的范围内。如果他要求他的线程保持在后台,那么这是否意味着提供的答案因此无关紧要?

以上是关于对创建后台计时器的情况感到困惑的主要内容,如果未能解决你的问题,请参考以下文章

如何在程序集中创建计时器或计数器?

对同步适配器、服务、加载程序、提供程序和异步任务感到困惑? [关闭]

用 JavaScript 构建倒计时时钟

iOS 保证定时器进入后台依然运行

Toast 通知从后台线程失败

为啥 Symfony 调试工具栏中的计时器(分析器)超过 100% 时间?