屏幕锁定解锁时网络丢失。

4

遇到了一个非常奇怪的问题,使用简单的AFNetworking下载操作,甚至尝试了简单的NSURLConnection操作,如果您让应用程序保持运行状态,然后锁定屏幕再解锁,连接就会失败。但在后台中完全正常工作。

有没有人遇到过类似NSURLConnection的问题,并想分享一些解决方案?

谢谢。


用户只有在解锁屏幕后才会失败吗? - Antzi
2个回答

1

看起来像是iOS的一个bug。很奇怪,但锁屏操作会以某种方式影响NSURLSession,导致它停止工作并返回NSURLErrorNetworkConnectionLost。因此在我的应用程序中,我放弃使用共享会话。我要么为每个请求使用一个新的会话对象,要么(如果我需要不断维护一个会话)每次屏幕解锁时重新创建它。这样可以正常工作。对于使用AFNetworking或任何其他建立在NSURLSession之上的第三方库的用户来说,情况当然更困难。您需要纠正库的代码,这绝对不是一件好事,但我认为没有其他选择。


0
非常有用的Andrey Chernukha, 在我的情况下,我发现您不必每次都重新创建新会话。 最终我使用数组来保存运行中的NSURLSessionDataTasks,并在手机解锁后恢复它们。
步骤:
  1. 我创建了一个数组NSMutableArray *dataTasksToResume
  2. - (void)applicationWillResignActive:(UIApplication *)application中,我将所有任务保存到dataTasksToResume数组中
  3. 取消所有正在运行的NSURLSessionDataTasks
  4. - (void)applicationDidBecomeActive:(UIApplication *)application中获取数组中的所有任务并恢复它们(重新创建它们)
  5. 享受吧!
希望对您有所帮助。

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