【问题标题】:Timer in Background in Swift 2Swift 2 中的后台定时器
【发布时间】:2016-02-17 05:20:34
【问题描述】:

我想计算客户时间(例如 00:20:04)。但后台应用程序只能运行 3 分钟。 我有计时器,我可以用 NSDate 计算应用程序关闭的秒数。但是不知道怎么调用这个函数。

所以我的问题是:应用程序如何理解应用程序何时在后台停止工作,以及如何理解何时返回应用程序?

【问题讨论】:

  • 我不清楚您要做什么。您是说客户稍后会启动应用程序并且您想知道已经过去了多少时间并恢复计时器(例如,类似应用程序的秒表)?或者您是说您想在一定时间后做某事(例如,当倒数计时器到期时通知客户)。每个都有自己的方法(但实际上并不需要在应用程序暂停/终止时保持计时器运行),但我们需要知道您要做什么才能提供进一步的建议。
  • 是的,我花了很长时间才弄清楚你想说什么。

标签: swift timer swift2 xcode7


【解决方案1】:

简答:

当用户开始计数时保存当前时间并在 applicationWillEnterForeground: 中进行校准,实际上您可以在设置计时器的代码中进行校准。

长答案:

如果您的应用处于挂起模式然后终止,您将不会收到任何通知。

应用必须随时准备终止,不应等待保存用户数据或执行其他关键任务。系统启动的终止是应用程序生命周期的正常部分。系统通常会终止应用程序,以便回收内存并为用户启动的其他应用程序腾出空间,但系统也可能会终止行为不端或未及时响应事件的应用程序。

暂停的应用在终止时不会收到任何通知;系统杀死进程并回收相应的内存。如果应用程序当前正在后台运行且未挂起,则系统会在终止之前调用其应用程序委托的 applicationWillTerminate:。设备重启时系统不会调用该方法。

除了系统终止您的应用之外,用户还可以使用多任务 UI 明确终止您的应用。用户发起的终止与终止暂停的应用程序具有相同的效果。应用程序的进程被杀死,并且没有通知发送到应用程序。

但是,您可以使用 AppDelegate 的这些方法在您的应用启动、进入后台或前台时获得通知:

application:willFinishLaunchingWithOptions:——这个方法是你的应用程序在启动时执行代码的第一个机会。

application:didFinishLaunchingWithOptions:—此方法允许您在应用显示给用户之前执行任何最终初始化。

applicationDidBecomeActive:——让你的应用知道它即将成为前台应用。使用此方法进行最后一分钟的准备工作。

applicationWillResignActive:——让您知道您的应用正在从前台应用过渡。使用此方法可将您的应用程序置于静止状态。

applicationDidEnterBackground:——让您知道您的应用现在正在后台运行,并且可能随时暂停。

applicationWillEnterForeground:——让您知道您的应用程序正在移出后台并返回前台,但它尚未处于活动状态。 applicationWillTerminate:——让您知道您的应用程序正在被终止。如果您的应用暂停,则不会调用此方法。

阅读iOS app life cycleUIApplicationDelegate Protocol Reference了解更多详情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多