iOS杀死我的后台获取过程;创建不必要的崩溃日志

时间:2013-10-27 19:56:18

标签: ios ios7

我在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,如果我开始时间不足,或者我做得对吗?

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

根据Apple docs

  

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

如果您使用http或ftp下载数据,可以使用NSURLSession and associated classes启动提取并立即调用完成处理程序,然后iOS将在下载完成后重新唤醒您的应用程序。 / p>