尝试在 iOS 上实现下载功能时,我遇到了一个相当奇怪的行为。下载实现工作正常,它成功完成,可以在后台运行,并且文件存储在设备上。但是,在下载过程中,我可以关闭 wifi 以让任务切换到蜂窝网络并继续(或使用蜂窝网络开始下载)。这表现为方面。但是当我再次启用wifi时,下载似乎永远不会切换回使用wifi。设备已连接,wifi-connection-bars 显示在状态栏。使用 rechability 功能检查可用的连接甚至会返回 Wifi,但下载似乎停留在使用蜂窝网络。
我检测到这种情况的方式是查看系统设置中的使用情况统计信息。蜂窝数据使用量将与挂起的下载同步上升,并继续上升,直到下载完成(即使再次打开 wifi)。
我已经使用 Alamofire 和直接使用 NSURLSession 和 NSURLSessionDownloadTask 进行了测试,它们的行为相似。我还在两个完全独立的项目中看到了这种行为,在多个设备上,在 iOS 8.4 和 9.1 中,当应用程序位于前台或后台时,甚至 AppStore 在下载应用程序时也会这样!
有其他人经历过这种情况吗?
如果是这样,您是否找到任何方法可以优雅地将任务切换回 wifi?
提前致谢。
Best Answer-推荐答案 strong>
这是正常行为。添加新的网络接口(interface)(例如打开 Wi-Fi)不会停止现有的 TCP 连接。它们会一直持续到原来的网络接口(interface)消失为止。
如果您想暂停请求并在 Wi-Fi 可用时重新连接,您需要在任务上调用 cancelByProducingResumeData:,然后使用该恢复数据创建一个新请求,以从中断的位置重新启动请求。该新请求将通过当前事件的网络接口(interface),如果 Wi-Fi 已启动并正在运行,该接口(interface)通常是 Wi-Fi 接口(interface)。
不过,在您停止现有请求之前,我建议您尝试对 Google 的 generate 204 或 Apple 的强制门户检测 URL 之类的东西进行探测请求,以确保 Wi-Fi 确实正常工作。
关于ios - 为什么在蜂窝网络上下载后不切换回 wifi?,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/33958620/
|