【问题标题】:Making a countdown timer and run it in the background制作倒数计时器并在后台运行
【发布时间】:2016-02-09 07:45:04
【问题描述】:

我想在我的应用中添加一个静音按钮,当用户单击它时,他会选择静音的持续时间,并且在启用静音时,用户不会收到来自我的应用的通知。

我认为NSTimer 是一个不错的选择,但我怎样才能用它做一个计时器呢?以及如何设置timer 也将在后台运行?

注意:我在后台使用位置监控。

【问题讨论】:

标签: ios cocoa-touch nstimer


【解决方案1】:

我认为您不需要在后台运行计时器 - 或任何复杂的解决方案:

  • 当您的应用程序处于前台时使用计时器(与往常一样)。触发时取消静音模式。

  • 当您的应用切换到后台模式并且计时器处于活动状态时,根据您的需要取消计时器或让它运行。

  • (可选)当您的应用程序在后台模式下执行时,不要发送通知。

  • 如果您的应用在不久之后被暂停,您的代码无论如何都不会执行。

  • 如果您的应用在切换到前台时仍然需要遵守静音状态,请计算您在激活静音模式时存储的日期时间值与当前日期时间的持续时间并进行比较这与你的超时。

【讨论】:

  • 我的应用程序根据用户的位置发送通知,这就是它的作用,所以我需要在后台发送通知。当用户想要静音一段时间,应用程序不应该发送通知(例如 5 小时),并且在特定时间结束后,应用程序应该开始自动向用户重新发送通知。关于我该怎么做的任何想法?
  • @FS.O 好的,我明白了。只要您的应用程序继续在后台模式下运行,计时器就会触发。这没有发生吗?注意:当您的应用暂停时,将不再执行任何代码。
  • 即使用户从多任务窗口杀死应用程序也应该可以工作,我该怎么做?
  • @FS.O 如果您的应用程序被暂停,那么当再次进入后台模式时,所有赌注都将关闭。尽管如此,当您的应用程序再次执行时,很容易检查它是否处于静音模式。也许,您可能需要一种方法,让您的应用程序在可接受的时间范围内唤醒 - 通过一些外部通知。查看重复项 - 这些可能会有所帮助。
  • 我应该在哪里设置计时器,让它在应用程序处于任何状态 5 分钟后调用我的应用程序上的方法?
【解决方案2】:

NSTimer 可以在一定的时间间隔后触发方法

首先声明一个 NSTimer 对象,比如“timer”

self.timer=[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(targetMethod:) userInfo:nil repeats:YES];

现在此计时器将在每 1 秒后触发 targetMethod。时间间隔为 1 秒。现在定义目标方法

- (void) targetMethod: (NSTimer*)theTimer
{
    second++;

    if(second==60)
    {
        minute++;
        second=0;

    }
}

我声明了两个 int 变量用于分钟和秒计数。现在每 1 秒后,秒会增加,每 60 秒后,分钟会增加。你可以试试看。

【讨论】:

  • 查了一下,在应用运行但不在后台时有效
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-21
  • 1970-01-01
  • 2011-12-28
  • 2020-11-13
相关资源
最近更新 更多