0

我试图更好地了解iOS在后台应用的行为。我有以下动作的按钮:iOS应用在后台永久运行

- (IBAction)createTask:(id)sender { 


    for(int i = 0; i < 10000; ++i){ 
     NSURL *url = [NSURL URLWithString:@"http://agronigeria.com.ng/wp-content/uploads/2013/06/cocoa.jpg"]; 
     NSData *data = [NSData dataWithContentsOfURL:url]; 
     NSLog(@"Image number %d with size %lu", i, (unsigned long)[data length]); 
     NSLog(@"Time before task is killed: %f", [[UIApplication sharedApplication] backgroundTimeRemaining]); 
    } 

}

只要我轻点按钮,我按home键,发送应用程序到后台。我期待这个很快就会停止(没有特殊背景模式的应用程序最长可以在后台运行的最长时间是多少?)。相反,它只是永远。 10分钟后,我停止了它。即使当backgroundTimeRemaining返回0时,它也会继续。

发生了什么?

PS我在安装了iOS 7的4S上运行这个。

+0

HTTP://www.raywenderlich .com/29948/backgrounding-for-ios希望这可以帮助你 –

+0

在iOS 7上,在设置菜单的常规部分有一个条目。它被称为“在后台刷新应用程序”,它可能会让应用程序在后台保持活跃状态​​。该功能是否打开? – Kevin

+0

@凯文它确实打开了。我把它关掉了,而且我得到了同样的行为。 :-( – cfischer

回答

0

检查,如果你有以下功能

应用:performFetchWithCompletionHandler

看似简单,但尝试添加该行或删除处理函数

[[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalNever]; 
+0

这个解决方案让应用继续在后台运行? –

+0

未必 - 来自苹果: setMinimumBackgroundFetchInterval: 指定backgrou之间必须经过的最短时间量撷取操作。 minimumBackgroundFetchInterval 可以启动另一个后台提取前必须经过的最小秒数。 该值仅供参考,并不表示预计在获取 操作之间所需的确切时间量。 讨论 此属性对于其Info.plist文件中没有UIBackgroundModes键且其获取值为 的应用程序无效。 – chewy