在applicationDidEnterBackground时运行重复计时器

时间:2011-06-29 22:54:12

标签: objective-c ios xcode4 nstimer

当且仅当应用程序在后台运行时,我的目标是每五秒运行一次重复计时器。我尝试了几个想法,但它们似乎没有用。

想法1:连一次都不运行。

- (void)applicationDidEnterBackground:(UIApplication *)application {

    [NSTimer scheduledTimerWithTimeInterval:(5.0/5.0) target:self selector:@selector(check_expiry) userInfo:nil repeats:YES];

}

创意2:每五秒运行一次,但我似乎无法停止循环。

- (void)applicationDidEnterBackground:(UIApplication *)application {
    counter = YES;
    while (counter) {
        sleep(5);
        [self check_expiry];
    }
    // Counter is set to NO in willEnterForeground and didBecomeActive, but this loop continues to run due the sleep();
}

如何让这个循环正常运行?

谢谢!

2 个答案:

答案 0 :(得分:4)

当iOS中的应用程序“进入后台”时,它不像普通的操作系统那样继续运行。应用程序进入暂停状态。它没有继续运行;只保留应用程序状态,即使不保证 - 如果设备内存不足,iOS将很乐意终止您的应用程序以将内存提供给活动应用程序。如果您尝试阻止applicationDidEnterBackground:,就像使用sleep()一样,iOS会立即终止您的申请,而不会立即从该方法返回。

如果您的应用程序配置为后台处理GPS事件,VOIP等,则会定期唤醒您的应用程序,但仅仅为了让您的应用程序运行而滥用这些应用程序将阻止您获得App Store批准。

The iOS Application Programming Guide已涵盖这一点。

答案 1 :(得分:0)

对于寻找解决方法的任何人,我只创建了一个系统,该系统在applicationDidEnterBackground:之后安排计时器,并在编辑/删除时更改/取消计时器。有关计时器调度的信息存储在本地字典中。