我必须将一组图像文件上传到数据库,因此,我偶然发现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+:
答案只是
600秒(10分钟),原因由上面的文章提供.
答案是时间系统分配给你的是机会主义.你将不得不使用@Gary Riches的建议
Run Code Online (Sandbox Code Playgroud)NSLog(@"Time Remaining: %f", [[UIApplication sharedApplication] backgroundTimeRemaining]);找出来.机会主义的原因是iOS 7+处理后台任务的方式完全不同,当然是优化的.确切地说,它具有间歇性行为,因此,如果您需要后台任务,例如下载大量数据,那么如果您使用它将会更有效
NSURLSession.
但是,在我的特殊情况下,我正在上传一个包含一个文件的单个对象.我不必考虑NSURLSession上传少量数据.此外,它是上传任务,它可能需要花费尽可能多的时间.:-)
对于这些TL;DR访问者,上面的答案应该足够了.有关详细信息,请参阅上面的文章.
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)
如果您想在应用程序处于后台时上传文件,则应使用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/