上传大视频iOS时延长后台任务超时时间

时间:2012-11-28 08:38:42

标签: objective-c ios

我有一个应用程序,我必须将大型视频上传到亚马逊s3存储桶。我正在使用由NSOperationQueue监管的NSOperations来运行并发任务。

上传小视频(小于200 Mb)时没有问题。 但问题是当我尝试上传大型视频时,10分钟后上传过程中断。

我已经使用beginBackgroundTaskWithExpirationHandler:^来获得一个10分钟的窗口。我可以延长这个超时期限的正确方法是什么?

如果我以某种方式设法延长此超时,Apple会拒绝该应用吗?

目前,我在AppDelegate中提供了以下代码,我建议参考链接iPhone - Backgrounding to poll for events

  - (void)applicationDidEnterBackground:(UIApplication *)application 
{

    UIApplication*    app = [UIApplication sharedApplication];
    dispatch_block_t expirationHandler;

    expirationHandler = ^{
        bgTask = [app beginBackgroundTaskWithExpirationHandler:expirationHandler];
    };

    bgTask = [app beginBackgroundTaskWithExpirationHandler:expirationHandler];
}

通过这段代码,我看到后台任务永远不会中断。正如您在到期处理程序中看到的那样,我发起了另一个后台任务事件,该事件导致无限运行的任务。尽管如此,我可以编写逻辑来在上传完成后结束后台任务,但我对这种方法有疑问..

你们有什么想法?

无论如何都是黑客攻击? Apple会拒绝该应用程序采用以下方法吗?

2 个答案:

答案 0 :(得分:2)

似乎hackisch但不错恕我直言(相反):D

如果苹果允许它通过,你是金色的,但事实上你正在滥用bg任务

BTW:即便如此,ios可能会取消你! +不要进行CPU密集型/内存密集型工作,因为它会影响其他应用程序的性能

答案 1 :(得分:2)

后台任务背后的想法是防止应用程序在后台持续运行。换句话说,如果你试图绕过Apple实施的限制,那么他们就会拒绝你的申请。

他们是否会这样做的问题只能由Apple回答。但是,正如Daij-Djan所提到的,还有其他情况会导致您的应用程序被杀死。

几个月前,我遇到了类似的情况,即应用程序必须将大文件上传到S3存储桶。解决方案是使用分段上传,以确保在应用程序变为活动状态时恢复上载过程。您可以阅读有关分段上传in the API reference的更多信息。