2012-09-04 38 views
6

的时候如果我有一个大文件下载去执行一个应用程序被转移到后台整理任务,有没有什么办法让下载执行功能还活着吗?的iOS:进入后台

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

理想我想那是什么我换我下载功能有过期处理程序,所以我的下载功能保持为之后的应用程序已移至后台允许的时间执行。

+1

http://stackoverflow.com/questions/9136890/how-should-beginbackgroundtaskwithexpirationhandler-be-dealt-with-for-an-nsurlc/9137656#9137656 – user523234

+0

谢谢,猜测这是一个更多的工作。 – SMK

回答

6

理想的情况是我想的是,我总结我的下载功能有过期处理程序,所以我的下载功能保持为之后的应用程序已移至后台允许的时间执行。

这就是它的工作原理。当您输入背景时,不会调用beginBackgroundTaskWithExpirationHandler:。这是什么电话,表明你开始的东西,如果你碰巧进入到了后台,而它的运行,你想完成。只需用beginBackgroundTaskWithExpirationHandler:endBackgroundTask:包装您现有的下载代码即可。

+0

你说得对,我应该更好地阅读文档! – SMK

-3

当你在forground时启动后台线程是完全正常的。添加您的自定义到期处理程序。做一个异步请求。

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

和AppleDEV的报价;

你可能会想使用异步网络的API。 iOS提供了各种各样的API来执行此操作 - 从低级API(如GCD)到高级API(如NSURLConnection),其间有很多停止操作,我们鼓励您使用它们。