当应用程序进入后台时运行重复计时器

3
我的目标是在应用程序在后台运行时每五秒运行一次重复计时器。我尝试了几个想法,但它们似乎都不起作用。
想法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个回答

4
在iOS中,当一个应用程序“进入后台”时,这不像正常的操作系统那样它会继续运行。该应用程序进入挂起状态。它不会持续运行;只有应用程序状态被保存,即使是这样也不能保证 - 如果设备内存不足,iOS将愉快地终止您的应用程序以将内存分配给活动应用程序。如果您尝试在applicationDidEnterBackground:中阻塞,就像您使用sleep()一样,iOS将简单地终止您的应用程序,因为没有及时从该方法返回。
如果配置了GPS事件、VOIP等后台处理,您的应用程序会定期唤醒,但滥用这些功能只是为了让您的应用程序运行,这将阻止您获得App Store批准。
所有这些都涵盖在iOS应用程序编程指南中。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接