尝试在iOS上实现下载功能时遇到了一种相当奇怪的行为。下载实现工作正常,可以在后台运行,文件存储在设备上。但是在下载过程中,我可以通过wifi来让任务切换到蜂窝网络并继续(或者只是使用蜂窝网络开始下载)。这表现得像预期的那样。但是当我再次启用wifi时,下载似乎永远不会切换回使用wifi。设备已连接,wifi连接条显示在状态栏上。使用可更新性功能来检查可用的连接甚至会返回Wifi,但下载似乎仍然停留在使用蜂窝网络。
我检测到这种情况的方法是查看系统设置中的使用情况统计信息。蜂窝数据的使用将与挂起的下载同步上升,并继续上升,直到下载完成(即使再次打开wifi)。
我已经使用Alamofire和直接使用NSURLSession和NSURLSessionDownloadTask进行了测试,它们的行为相似。我还在iOS 8.4和9.1中的多个设备上的两个完全独立的项目中看到了这种行为,当应用程序位于前台或后台时,甚至AppStore在下载应用程序时的行为都是这样的!
还有其他人经历过这个吗? 如果是这样,你有没有办法优雅地将任务切换回wifi?
提前致谢。
答案 0 :(得分:1)
这是正常行为。添加新的网络接口(例如,打开Wi-Fi)不会停止现有的TCP连接。它们将一直持续到原来的网络接口消失为止。
如果要在Wi-Fi可用时暂停请求并重新连接,则需要在任务上调用cancelByProducingResumeData:然后使用该恢复数据创建一个新请求,以从停止的位置重新启动请求。新请求将通过当前活动的网络接口,如果Wi-Fi启动并运行,通常是Wi-Fi接口。
在您停止现有请求之前,我建议尝试针对Google生成204或Apple的强制门户网站检测网址之类的内容进行探测请求,以确保Wi-Fi确实正常运行。