【问题标题】:In a iOS app, if a timer is scheduled to fire and the app is in background, am I certain that it will fire as soon as the app goes foreground again?在 iOS 应用程序中,如果计划触发计时器并且应用程序处于后台,我是否确定它会在应用程序再次进入前台时触发?
【发布时间】:2019-08-25 10:39:45
【问题描述】:

我是一个快速的 iOS 应用程序,我有一个每天触发的计时器(86400 秒)。我已经测试了应用程序在后台时计时器的行为,在我看来,在这种情况下,计时器只会在应用程序再次进入前台时触发。我能保证这种行为吗?我想确定计时器确实触发了。如果它在应用程序再次进入前台时触发,对我来说很好,只要它在那时触发。谢谢

【问题讨论】:

  • 如果您对应用碰巧在前台时触发事件感到满意,那么您可以在首选项中保存上次触发日期,并检查此变量在 didfinishlaunchingwithoptions + applicationDidEnterBackground 方法 中每次启动应用程序时,再次使用新的 Date 对象更新您的首选项
  • 感谢您的评论,但我担心的是用户从不退出应用程序。我需要这个计时器来触发,如果应用程序在后台也是如此。如果不可能,我希望在应用程序再次进入前台时触发计时器。

标签: ios cocoa-touch timer


【解决方案1】:

简短的回答是,应用程序可以无限期地在后台继续“执行”,原因有限。除了这些特定原因之外,应用程序还可以要求短时间继续在后台执行。一旦这些时间结束,你告诉 iOS 你已经完成了,在这种情况下应用程序被暂停,或者 iOS 最终会强制终止你的应用程序(这取决于资源)。

因此,触发计时器并不是这些具体原因之一。但是,您正在使用计时器进行的处理可能是!

您的应用在被暂停的过程中会暂时处于后台。当它被挂起时,它不执行任何操作——包括计时器。

如果您的应用程序被终止(从内存中刷出或被 iOS 关闭),它不会进入前台,而是再次启动。您的计时器正在触发,因为您正在启动您的应用程序。

如果您的应用保持暂停状态,它将进入前台。由于所涉及的时间间隔,您的计时器将触发。

无论哪种方式,您都可以保证您的计时器触发。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 2017-12-04
    • 2018-06-11
    • 1970-01-01
    • 2011-11-02
    相关资源
    最近更新 更多