我在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
,如果我开始时间不足,或者我做得对吗?
答案 0 :(得分:2)
崩溃日志听起来很合理,因为应用程序被操作系统杀死了。
如果你想避免崩溃并且优雅地失败,是的,监控backgroundTimeRemaining
听起来是一个很好的解决方案。
由于你不打算在任何情况下及时完成操作,最好自己终止它,而不是被操作系统杀死。
答案 1 :(得分:1)
根据Apple docs,
您的应用最多有30秒的挂钟时间来执行下载操作并调用指定的完成处理程序块
如果您使用http或ftp下载数据,可以使用NSURLSession and associated classes启动提取并立即调用完成处理程序,然后iOS将在下载完成后重新唤醒您的应用程序。 / p>