上传大型视频iOS时延长后台任务超时时间[关闭]

Posted

技术标签:

【中文标题】上传大型视频iOS时延长后台任务超时时间[关闭]【英文标题】:Extending Background Task timeout period while uploading Large videos iOS [closed] 【发布时间】:2012-11-16 01:27:18 【问题描述】:

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

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

你们觉得呢?

这算不算黑客行为?苹果会因为以下方式拒绝该应用程序吗?

【问题讨论】:

bgTask = [app beginBackgroundTaskWithExpirationHandler:^(void) [self.queue waitUntilAllOperationsAreFinished]; [app endBackgroundTask:bgTask]; bgTask = UIBackgroundTaskInvalid; ];这家伙呢?? 你们无权与愚蠢的答案和愚蠢的 cmets 辩论。老实说,这是一个值得讨论的话题。请大家,我会要求你们进行公开讨论,这样我们就可以关注每件事的细节。谢谢 我可以使用 NSOperationQueue 在后台上传大视频吗,苹果会拒绝我的应用吗?? 这个问题已经变得无关紧要了——随着 ios 7 和 NSURLSession API 的出现。 【参考方案1】:

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

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

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

【讨论】:

我认为这个想法很清楚。不要过度推动系统。【参考方案2】:

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

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

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

【讨论】:

你是对的兄弟。

以上是关于上传大型视频iOS时延长后台任务超时时间[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

csharp上传大型视频文件到服务器,解决方案

应用程序关闭时的 iOS 任务

iOS:在应用程序处于后台时执行上传任务

在后台IOS实现长时间运行的任务

NSURLSession 上传任务超时

在 iOS 应用程序处于后台时上传视频文件?