iOS:输入背景时完成任务

时间:2012-09-04 10:36:01

标签: objective-c ios background-process

如果我有一个大文件下载正在进行应用程序移动到后台,有没有办法让下载执行功能保持活动状态?

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

理想情况下,我想要的是我使用过期处理程序包装我的下载功能,因此我的下载功能会在应用程序移动到后台后的指定时间内继续执行。

2 个答案:

答案 0 :(得分:7)

  

理想情况下,我想要的是我使用过期处理程序包装我的下载功能,因此我的下载功能会在应用程序移动到后台后的指定时间内继续执行。

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

答案 1 :(得分:-3)

当你在forground中时,启动后台线程是完全可以的。添加自定义到期处理程序。做异步请求。

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

来自AppleDEV的引用;

  

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