6

如果我正在下载大文件并且应用程序被移到后台,有没有办法让下载执行功能保持活力?

我知道beginBackgroundTaskWithExpirationHandler:当应用程序移动到后台时会被调用,我可以在那里开始我的任务,但我不想开始新任务,我想完成我的旧任务。它可以用 解决beginBackgroundTaskWithExpirationHandler:,但为此我需要暂停我的下载并从正确的位置恢复它,这简直是愚蠢的。

理想情况下,我想要的是我用过期处理程序包装我的下载函数,所以我的下载函数在应用程序移动到后台后继续执行允许的时间。

4

2 回答 2

7

理想情况下,我想要的是我用过期处理程序包装我的下载函数,所以我的下载函数在应用程序移动到后台后继续执行允许的时间。

这正是它的工作原理。beginBackgroundTaskWithExpirationHandler:进入后台时不调用。这就是所说的表明你正在开始的东西,如果你碰巧在它运行时进入后台,你想完成。只需用beginBackgroundTaskWithExpirationHandler:和包装现有的下载代码endBackgroundTask:

于 2012-09-04T14:30:44.940 回答
-3

在前台启动后台线程是非常好的。添加您的自定义到期处理程序。做一个异步请求。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 
                                         (unsigned long)NULL), ^(void) {
    [self performYourStuffInTheBackGround];
});

以及来自 AppleDEV 的报价;

您可能想要使用异步网络 API。iOS 提供了各种各样的 API 来实现这一点——从像 GCD 这样的低级 API 到像 NSURLConnection 这样的高级 API,中间有很多停止——我们鼓励你使用它们。

于 2012-09-04T11:04:57.523 回答