当iphone处于睡眠模式时,Iphone应用程序会延迟10-15分钟

时间:2010-03-07 15:34:26

标签: iphone sleep nstimer

我创建了一个使用NSTimer的应用程序,它每秒都会被触发。

我的问题是如果Iphone处于睡眠模式,我会得到10到15的延迟 触发事件前几分钟。我有stackoverflowed和google这个 这个原因似乎是手机停止听某些 处于睡眠模式的事件。

有些人通过播放静音来解决这个问题,不允许这样做 电话睡觉。

  1. 延迟的原因是什么?
  2. 静音解决方案似乎是一个非常“脏”的解决方案。还有其他方法可以解决这个问题吗?
  3. 如果我使用静音解决方案,它会通过苹果评论吗?
  4. 代码:

    timer = [NSTimer timerWithTimeInterval:1.0f target:self selector:@selector(goAction)userInfo:nil repeats:YES];
    
    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
    
    -(void)goAction {
      // Here i check for some dates and then call the activateBeepAlarmView 
    }
    

4 个答案:

答案 0 :(得分:2)

因为没有人回答我的三个问题,我将不得不回答:

<强> 1。延迟的原因是什么? 我将引用Ben S

  

在您的应用程序上调用applicationWillResignActive后,您只需停止接收事件:       当应用程序从活动状态转换为非活动状态时,委托可以实现此方法以进行调整。当应用程序处于非活动状态时,它正在执行但不会调度传入事件。当弹出覆盖窗口或设备被锁定时会发生这种情况。

     

睡眠模式是节省能源。为此,设备会停止侦听您要求的事件。 NSTimer事件仍将触发,因为它们不需要昂贵的(电池式)硬件监控。此外,使用NSTimer实现警报,因此即使在睡眠状态下它们也需要能够运行。否则,人们可能不会醒来并责怪他们的iPhone。

<强> 2。静音解决方案似乎是一个非常“肮脏”的解决方案。还有其他方法可以解决这个问题吗?
不,目前我还没有找到另一种解决方案,如果我错了,请随时纠正我。 查看this博客文章如何操作。

第3。如果我使用静音解决方案,它会通过苹果审查吗?

答案 1 :(得分:1)

当iPhone进入睡眠状态时,您的应用程序和运行NSTimer的runloop也会进入睡眠状态。

您似乎认为NSTimer是某种基于硬件的计时器。它不是。它完全在启动它的应用程序的软件内运行。我不知道是什么唤醒你的应用程序,但绝对不是NSTimer。

简而言之,你想做的事是不可能的。你无法在手机上睡觉,然后让应用程序仍处于活动状态并正在运行。静音技术只是保持手机清醒和应用程序运行的一个障碍。

如果您需要手机保持清醒,则需要将应用程序的idleTimerDisabled设置为YES。这将阻止手机休眠,应用程序可以保持活动状态。但是一旦你让手机睡不着,它就无法从应用程序代码中唤醒。只有硬件才能响应警报或传入消息。

答案 2 :(得分:0)

每秒触发NSTimer时,您的应用会发生什么?请提供代码,显示计时器的创建以及计时器完成时调用的选择器的代码。

你是说“延迟10到15分钟”是什么意思?延迟总是那么长,或者你等待唤醒iPhone然后触发事件多长时间?

根据您每秒钟需要做的事情,您可以通过不同的方式处理这种情况。请回复,我们将尝试通过这个方式。

巴特

答案 3 :(得分:0)

@Jakob,

使用“官方SDK”是不可能的。如果您正在为监狱破坏的手机开发应用程序,那么您可以使用IOKit框架。有关详细信息,请参阅this