我的应用程序将视频上传到 Facebook。我想在后台完成上传,即使不耐烦的用户在上传过程中单击主页按钮也是如此。
经过一些阅读,我尝试了这个:
UIBackgroundTaskIdentifier bti = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[[UIApplication sharedApplication] endBackgroundTask:bti];
}];
[fb requestWithGraphPath:@"me/videos"
andParams:params
andHttpMethod:@"POST"
andDelegate:self];
[[UIApplication sharedApplication] endBackgroundTask:bti];
工作是用fb请求方式完成的。视频通过 http 连接上传到 Facebook。这工作正常,但如果您在上传过程中通过单击“主页”按钮使应用程序后台运行,上传将暂停。如果您将应用置于前台,上传将继续。
我希望发生的是上传将在后台完成。
有希望让它发挥作用吗?我对整个 beginBackgroundTask 做错了吗?以这种方式工作似乎太简单了,但文档似乎就是这么说的。
任何帮助,非常感谢。
-- 约翰
最佳答案
好吧,我明白了。您需要在要在后台完成的长任务开始时执行“开始”代码,即使在应用程序退出后也是如此,然后在任务完成时执行“结束”代码。
我上面的代码过早地执行了“结束”代码,因此几乎立即结束了后台执行。
这样做的方法是做类似的事情:
// make sure save can complete in the background
if ([[UIDevice currentDevice] isMultitaskingSupported])
backgroundTaskID = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{}];
当长任务开始时。正如上面的 hypercrypt 所说,“backgroundTaskID 必须是一个 ivar 或您稍后可以在长任务完成时获得的东西。
当任务完成时,执行类似:
if ([[UIDevice currentDevice] isMultitaskingSupported]) {
[[UIApplication sharedApplication] endBackgroundTask:backgroundTaskID];
backgroundTaskID = UIBackgroundTaskInvalid;
}
它就像一个魅力。
关于iOS - 如何在后台完成长进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7959602/