【问题标题】:Execute a line of code after a certain amount of time in the background on iOS 7iOS 7 后台运行一定时间后执行一行代码
【发布时间】:2014-05-15 15:32:40
【问题描述】:

为了提供一些上下文,我正在开发的应用程序允许用户沿时间线记录一系列事件。我们从 beta 测试人员那里收到的一条重要反馈是,当用户在录制时退出应用程序时,他们希望计时器在设定的时间内保持最新状态。

例如,如果用户记录了 5 分钟,然后离开应用查看电子邮件 20 秒,则计时器应该是 5:20,但实际上仍然是 5 分钟。

所以我们已经解决了这个问题 - 应用现在会显示 5:20,这在后台运行。

但是,我们无法在一定时间后找到阻止它的方法。如果应用程序在后台运行了很短的时间,用户可能希望计时器恢复,但如果您将其留在后台 30 分钟,计时器将更新,我希望能够给用户有一个可选的截止时间,以便应用在设定的时间后暂停。

我试过监听 UIApplicationDelegate 通知,但问题是我正在寻找 applicationDidEnterBackground: 和 applicationWillTerminate 之间的一个点,但遗憾的是那里没有什么可以满足我的需求。

总而言之,我希望从 applicationWillResignActive: 开始有一个 30-60 秒的宽限期来确定是暂停计时器,还是让它继续运行。

这可能吗?

提前致谢

【问题讨论】:

  • 我不确定这是否可行,但在applicationDidEnterBackground: 中,您也许可以创建第二个计时器并将其设置为 30-60 秒。然后,当计时器触发时,使跟踪记录时间的原始计时器无效
  • 我试过了,但没有成功,感谢您的宝贵时间!

标签: ios uiapplicationdelegate


【解决方案1】:

假设您的应用将在后台运行通常是个坏主意。

更好的考虑方式是 IMO 将变量设置为 applicationDidEnterBackground: 中的当前时间,并在 applicationWillBecomeActive: 中检查到现在的时间间隔:

  • 如果间隔大于您的宽限期,请将时间备份到应用暂停时。
  • 如果它更小,请更新它,就像应用从未在后台运行一样。

【讨论】:

  • 是的,我想我现在正朝着这个方向前进。我已经听过 applicationWillBecomeActive: 并且我现在正在检查最新的时间会话,然后获取它的开始日期和当前日期之间的差异 - 如果大于 3 分钟,我将其减少到 3 分钟,但如果它更少或等于我没有编辑它。我认为这会奏效
【解决方案2】:

使用dispatch_after在一定秒数后执行一段代码:

int64_t delay = 30.0; // In seconds
dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, delay * NSEC_PER_SEC);
dispatch_after(time, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0ull), ^(void){

    //DO SOMETHING

});

【讨论】:

    【解决方案3】:

    Swift 3.0 Xcode 8.0 代码示例:

    Using delegate methods : applicationWillBecomeActive & applicationWillResignActive to capture the time in between.
    

    let deadlineTime = DispatchTime.now() + .seconds(30)
    DispatchQueue.main.asyncAfter(deadline: deadlineTime) {
          alert.dismiss(animated: true, completion: nil)
    }
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2013-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-16
      • 1970-01-01
      • 1970-01-01
      • 2013-06-15
      相关资源
      最近更新 更多