我有一个应用程序,我必须将大型视频上传到亚马逊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会拒绝该应用程序采用以下方法吗?
答案 0 :(得分:2)
似乎hackisch但不错恕我直言(相反):D
如果苹果允许它通过,你是金色的,但事实上你正在滥用bg任务
BTW:即便如此,ios可能会取消你! +不要进行CPU密集型/内存密集型工作,因为它会影响其他应用程序的性能
答案 1 :(得分:2)
后台任务背后的想法是防止应用程序在后台持续运行。换句话说,如果你试图绕过Apple实施的限制,那么他们就会拒绝你的申请。
他们是否会这样做的问题只能由Apple回答。但是,正如Daij-Djan所提到的,还有其他情况会导致您的应用程序被杀死。
几个月前,我遇到了类似的情况,即应用程序必须将大文件上传到S3存储桶。解决方案是使用分段上传,以确保在应用程序变为活动状态时恢复上载过程。您可以阅读有关分段上传in the API reference的更多信息。