iOS:当进入后台时完成任务

6
如果我正在下载一个大文件,而应用程序被移至后台,有没有办法保持下载执行函数的活动状态?
我知道当应用程序移至后台时会调用beginBackgroundTaskWithExpirationHandler:,我可以在那里启动我的任务,但我不想启动新任务,我想完成旧任务。这可以通过beginBackgroundTaskWithExpirationHandler:解决,但为此我需要暂停下载并从正确的位置恢复下载,这很愚蠢。
理想情况下,我希望用过期处理程序包装我的下载函数,以便在应用程序移至后台后,我的下载函数在允许的时间内继续执行。

1
https://dev59.com/1GDVa4cB1Zd3GeqPZQkt#9137656 - user523234
谢谢,我猜这需要更多的工作。 - SiimKallas
2个回答

7
理想情况下,我希望用一个过期处理程序包装我的下载功能,这样当应用程序被移动到后台时,我的下载功能就可以继续执行一段时间。实际上,它的工作原理就是这样的。beginBackgroundTaskWithExpirationHandler:不是在进入后台时调用的,而是你调用它来表示你正在开始一些工作,如果在运行期间进入后台,你仍然希望完成这些工作。只需使用beginBackgroundTaskWithExpirationHandler: endBackgroundTask:来包装你现有的下载代码即可。

-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,中间还有很多选择——我们鼓励你使用它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接