9

我有一个应用程序,我必须在其中将大型视频上传到 Amazon 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];
}

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

你们有什么感想?

无论如何都是黑客行为?苹果会因为以下方法拒绝该应用程序吗?

4

2 回答 2

2

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

他们是否会这样做的问题只能由苹果来回答。但是,正如 Daij-Djan 所提到的,在其他情况下您的应用程序可能会被终止。

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

于 2012-11-28T10:29:02.327 回答
2

看起来很hackisch但还不错恕我直言(相反):D

如果苹果让它通过,你就是金子,但实际上你在滥用 bg 任务

顺便说一句:即使这样,ios 也可能会取消你!+ 不要做 CPU 密集型/内存密集型工作,因为它可能会影响其他应用程序的性能

于 2012-11-28T08:42:21.457 回答