当且仅当应用程序在后台运行时,我的目标是每五秒运行一次重复计时器。我尝试了几个想法,但它们似乎没有用。
想法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();
}
如何让这个循环正常运行?
谢谢!
答案 0 :(得分:4)
当iOS中的应用程序“进入后台”时,它不像普通的操作系统那样继续运行。应用程序进入暂停状态。它没有继续运行;只保留应用程序状态,即使不保证 - 如果设备内存不足,iOS将很乐意终止您的应用程序以将内存提供给活动应用程序。如果您尝试阻止applicationDidEnterBackground:
,就像使用sleep()
一样,iOS会立即终止您的申请,而不会立即从该方法返回。
如果您的应用程序配置为后台处理GPS事件,VOIP等,则会定期唤醒您的应用程序,但仅仅为了让您的应用程序运行而滥用这些应用程序将阻止您获得App Store批准。
答案 1 :(得分:0)
对于寻找解决方法的任何人,我只创建了一个系统,该系统在applicationDidEnterBackground:
之后安排计时器,并在编辑/删除时更改/取消计时器。有关计时器调度的信息存储在本地字典中。