1

我在 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

4

2 回答 2

2

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

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

由于无论如何您都不会及时完成操作,因此最好自己终止它,而不是被操作系统杀死。

于 2013-10-27T20:17:37.890 回答
1

根据Apple 文档

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

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

于 2013-12-08T21:52:57.460 回答