AFNetworking是否支持后台运行?

26

我正在调查将AFNetworking作为ASIHTTPRequest的替代方案,并注意到完全没有关于它是否支持后台下载/上传的信息。

使用ASIHTTPReqeust对象,您只需调用[request setShouldContinueWhenAppEntersBackground:YES],请求就可以在后台继续进行。那么AFNetworking中是否支持此功能呢?


如果AFNetworking中没有后台执行的支持(我不确定是否有),你可以将AFNetworking中想要的额外功能移植到ASIHTTPRequest中,或者将后台执行支持(相对简单)添加到AFNetworking中。 - user244343
1个回答

48
编辑: 从 AFNetworking 1.0RC1 开始,这是一个显式的功能。现在的 AFURLConnectionOperation 已经有了方法 setShouldExecuteAsBackgroundTaskWithExpirationHandler:,能够透明地为您管理所有这些内容。

这是一个隐含的功能,所以我没有真正考虑过它的广告。你需要做的只是:


- (void)applicationWillResignActive:(UIApplication *)application {
    __block UIBackgroundTaskIdentifier backgroundTaskIdentifier = [application beginBackgroundTaskWithExpirationHandler:^(void) {
        [application endBackgroundTask:backgroundTaskIdentifier];
        [[YourRestClient sharedClient] cancelAllHTTPOperations];
    }];
}

这段代码涉及iOS应用程序在进入后台时如何处理任务。该方法使用了UIBackgroundTaskIdentifier和beginBackgroundTaskWithExpirationHandler方法,以确保应用程序可以在后台运行,并执行指定的任务。如果任务完成或时间过期,调用endBackgroundTask方法来结束任务,并取消所有HTTP操作。

或者,如果你在自己的NSOperationQueue中管理操作,只需在此处使用-cancelAllOperations取消所有操作。


5
听起来你正在提供取消网络连接的解决方案,尽管问题是关于在移动到后台时生成/继续AFNetworking操作。对此有什么想法吗?考虑到大多数AF方法都是基于块的/立即返回的,我发现在它们真正完成之前,系统认为它们已经完成了...也许在后台模式下运行时只需使用waitUntilFinished? - Hunter
8
@Hunter,我认为你误解了。调用beginBackgroundTaskWithExpirationHandler函数可以确保请求在后台继续执行。只有当应用程序处于非活动状态(例如10分钟)时,请求才会被取消。 - Felix
7
警告:在 applicationWillResignActive 中使用 mattt 的 beginBackgroundTaskWithExpirationHandler 代码时,务必在其中添加与 endBackgroundTask 匹配的调用 - 否则 IOS 将在 600 秒后杀死您的应用程序,并在前台重新启动您的应用程序。 - mr_marc
3
  • (void)applicationWillResignActive:(UIApplication *)application { UIBackgroundTaskIdentifier backgroundIdentifier = [application beginBackgroundTaskWithExpirationHandler:^(void) { [[AFHTTPClient sharedClient] cancelAllHTTPOperations]; }]; [application endBackgroundTask:backgroundIdentifier]; }
翻译:在应用程序即将进入非活动状态时,为了确保下载任务的完成,此代码片段启动了一个后台任务来取消正在进行的网络请求,并在任务完成后结束该后台任务。
- mr_marc
7
@matttдҪ еҸҜиғҪйңҖиҰҒжӣҙж–°дҪ зҡ„зӯ”жЎҲпјҢжҸҗеҸҠдҪ ж·»еҠ зҡ„setShouldExecuteAsBackgroundTaskWithExpirationHandler:ж–№жі•гҖӮжҲ‘д№ӢеүҚдёӢиҪҪзҡ„зүҲжң¬йҮҢжІЎжңүж„ҸиҜҶеҲ°иҝҷдёӘж–№жі•еӯҳеңЁгҖӮ - brainjam
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接