2012-11-28 56 views
8

我有一个应用程序,我必须将大视频上传到Amazon S3存储桶。我正在使用由NSOperationQueue管理的NSOperations来运行并发任务。延长后台任务超时期间上传大视频iOS

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

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

如果我以某种方式设法延长此超时时间,苹果是否会拒绝该应用程序?

目前我在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]; 
} 

随着这段代码我看到后台任务被从未中断。正如您在过期处理程序中看到的那样,我已经启动了另一个后台任务事件,这导致无限运行的任务。尽管如此,一旦我的上传完成后,我可以编写逻辑结束后台任务,但我对此方法有所怀疑。

你们认为什么?

这是一种黑客手段吗?苹果是否会拒绝以下方法的应用程序?

+0

bgTask = [app beginBackgroundTaskWithExpirationHandler:^(void){self.queue waitUntilAllOperationsAreFinished]; [app endBackgroundTask:bgTask]; bgTask = UIBackgroundTaskInvalid; }];那个伙计呢? – Xcoder

+0

你们无权辩论愚蠢的答案和愚蠢的评论。老实说这是一个需要辩论的话题。请大家,我会请你公开讨论,以便我们可以关注一切的细节。谢谢 –

+0

我可以用NSOperationQueue在后台上传大视频吗,苹果会否拒绝我的应用? –

回答

2

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

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

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

+0

我认为这个想法很明确。不要推动系统太多。 – Xcoder

2

似乎hackisch但也不坏恕我直言(相反):d

如果苹果让它穿过去,你是金色的,但实际上你在滥用BG任务

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

+0

你是对的兄弟。 –

相关问题