首页 文章

为什么在蜂窝网络上没有下载切换回wifi?

提问于
浏览
2

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

我检测到这种情况的方法是查看系统设置中的使用情况统计信息 . 蜂窝数据的使用将与待处理的下载同步上升,并继续上升,直到下载完成(即使再次打开wifi) .

我已经使用Alamofire和直接使用NSURLSession和NSURLSessionDownloadTask进行了测试,它们的行为相似 . 我还在两个完全独立的项目中看到了这种行为,在iOS 8.4和9.1中的多个设备上,当应用程序位于前台或后台时,甚至AppStore在下载应用程序时的行为都是这样的!

有人经历过这个吗?如果是这样,你有没有办法优雅地将任务切换回wifi?

提前致谢 .

1 回答

  • 1

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

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

    但是,在您停止现有请求之前,我建议尝试针对Google生成204或Apple的强制门户网站检测网址之类的内容进行探测请求,以确保Wi-Fi确实正常运行 .

相关问题