Apple允许后台任务运行多长时间?

don*_*key 15 iphone ios

我必须将一组图像文件上传到数据库,因此,我偶然发现Apple的后台执行指南,以确保在用户暂停或终止我的应用程序时应用程序仍然上传数据.

但在解释中,它表示giving it a little extra time to finish its work如果我们打电话beginBackgroundTaskWithName:expirationHandler:beginBackgroundTaskWithExpirationHandler:开始后台任务.

多长时间little extra time

don*_*key 14

如果我错了,请纠正我,但我偶然发现了一篇来自Xamarin 的完美文章,讨论了iOS背景功能.

我将简单分为两部分,ios pre 7和ios 7+:

iOS版本预售7

答案只是600秒(10分钟),原因由上面的文章提供.

iOS版本7+

答案是时间系统分配给你的是机会主义.你将不得不使用@Gary Riches的建议

NSLog(@"Time Remaining: %f", [[UIApplication sharedApplication] backgroundTimeRemaining]);
Run Code Online (Sandbox Code Playgroud)

找出来.机会主义的原因是iOS 7+处理后台任务的方式完全不同,当然是优化的.确切地说,它具有间歇性行为,因此,如果您需要后台任务,例如下载大量数据,那么如果您使用它将会更有效NSURLSession.

但是,在我的特殊情况下,我正在上传一个包含一个文件的单个对象.我不必考虑NSURLSession上传少量数据.此外,它是上传任务,它可能需要花费尽可能多的时间.:-)

对于这些TL;DR访问者,上面的答案应该足够了.有关详细信息,请参阅上面的文章.

  • 当应用程序是在调试配置中构建时,可能会发生这种情况。当为发布和分布式而构建时,操作系统在停止后台任务方面更加激进。 (2认同)

Gar*_*hes 8

The amount of time will differ based on many different variables, but the value can be checked by referencing the backgroundTimeRemaining property on UIApplication:

NSLog(@"Time Remaining: %f", [[UIApplication sharedApplication] backgroundTimeRemaining]);
Run Code Online (Sandbox Code Playgroud)


mit*_*esh 6

如果您想在应用程序处于后台时上传文件,则应使用Apple的后台服务.iOS会给你的应用时间约.3分钟(根据一些经验)完成您的任务,然后它将杀死您的应用程序.

Apple允许在特殊情况下长时间运行应用程序.为此,您需要在info.plist文件中使用UIBackgroundModes.有关这些特殊情况的更多信息,请参阅此链接中的表3-1 .

编辑
这是一篇很好的文章,描述了后台任务运行时以及如何在iOS中实现长时间运行的后台任务.
https://gooddevbaddev.wordpress.com/2013/10/22/ios-7-running-location-based-apps-in-the-background/