gpt4 book ai didi

iOS - 如何在后台完成长进程

转载 作者:技术小花猫 更新时间:2023-10-29 11:11:55 24 4
gpt4 key购买 nike

我的应用程序将视频上​​传到 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com