Ios 为什么不';t下载在使用蜂窝网络后是否切换回wifi?

Ios 为什么不';t下载在使用蜂窝网络后是否切换回wifi?,ios,nsurlsession,alamofire,Ios,Nsurlsession,Alamofire,我在尝试在iOS上实现下载功能时遇到了一个相当奇怪的行为。下载实现工作正常,成功完成,可以在后台运行,文件存储在设备上。不过,在下载过程中,我可以打开wifi,让任务切换到蜂窝网络并继续(或者使用蜂窝网络开始下载)。这表现为aspected。但当我再次启用wifi时,下载似乎永远不会切换回使用wifi。设备已连接,wifi连接栏显示在状态栏上。使用rechability功能检查可用的连接甚至会返回Wifi,但下载似乎停留在使用蜂窝网络上 我检测这种情况的方法是查看系统设置中的使用情况统计数据。手

我在尝试在iOS上实现下载功能时遇到了一个相当奇怪的行为。下载实现工作正常,成功完成,可以在后台运行,文件存储在设备上。不过,在下载过程中,我可以打开wifi,让任务切换到蜂窝网络并继续(或者使用蜂窝网络开始下载)。这表现为aspected。但当我再次启用wifi时,下载似乎永远不会切换回使用wifi。设备已连接,wifi连接栏显示在状态栏上。使用rechability功能检查可用的连接甚至会返回Wifi,但下载似乎停留在使用蜂窝网络上

我检测这种情况的方法是查看系统设置中的使用情况统计数据。手机数据使用量将与待下载同步上升,并持续上升,直到下载完成(即使再次打开wifi)

我已经用Alamofire和直接使用NSURLSession和NSURLSessionDownloadTask进行了测试,它们的行为类似。在iOS 8.4和9.1中,当应用程序位于前台或后台时,我也在两个完全不同的项目中看到过这种行为,在多个设备上,甚至在下载应用程序时,AppStore也会这样做

有其他人经历过吗? 如果是这样的话,你有没有找到任何方法将任务优雅地切换回wifi


提前谢谢。

这是正常的行为。添加新的网络接口(如打开Wi-Fi)不会停止现有的TCP连接。它们将继续,直到原始网络接口消失

如果要暂停请求并在Wi-Fi可用时重新连接,则需要在任务上调用cancelByProducingResumeData:以创建一个新请求,并使用该恢复数据从停止的位置重新启动请求。新请求将通过当前活动的网络接口,如果Wi-Fi已启动并正在运行,则通常为Wi-Fi接口

但是,在停止现有请求之前,我建议尝试对谷歌的generate 204或苹果的一个捕获式门户检测URL进行探测请求,以确保Wi-Fi真正正常工作