iOS会杀死我的后台获取进程; 创build不必要的崩溃日志

我在iOS 7中使用新的后台获取模式,在用户的崩溃日志中,我看到了很多:

MyApp[11893] has active assertions beyond permitted time: {( <BKProcessAssertion: 0x176afef0> identifier: Background Content Fetching (3281) process: MyApp[11893] permittedBackgroundDuration: 30.000000 reason: backgroundContentFetching owner pid:33 preventSuspend preventThrottleDownUI preventIdleSleep preventSuspendOnSleep )} 

我想我得到这个,因为我的更新花费的时间超过了允许的30秒,因此被系统杀死。 我不能确保获取时间<30秒,因为这显然取决于许多外部因素。

现在,这似乎是相当合理的行为 – 甚至是理想的 – 但是它是否需要崩溃和污染日志? 我是否应该监视[UIApplication sharedApplication].backgroundTimeRemaining ,如果我开始按时运行,或者我正在做的事情,请尽早调用completionHandler

崩溃日志听起来很合理,因为应用程序正在被操作系统杀死。

如果你想避免崩溃,并优雅地失败,是的,监视backgroundTimeRemaining听起来像一个很好的解决scheme。

既然你不打算在任何情况下及时完成操作,最好是自己终止,而不是被操作系统杀死。

根据苹果文档 ,

您的应用程序有多达30秒的挂钟时间来执行下载操作并调用指定的完成处理程序块

如果您使用http或ftp下载数据,则可以使用NSURLSession和关联的类来启动获取并立即调用完成处理程序,然后iOS将在下载完成后重新唤醒您的应用程序。