我想在iOS上利用网络呼叫的优先级。
到目前为止,我正在使用target "PROJECT_NAME" do
pod 'FlurrySDK'
end
。我创建这样的网络呼叫:
URLSessionTask.priority
问题是我仍然看到优先级为0.0的下载任务一旦启动就会从优先级为1.0的任务中获得大量负载(最多约60%)。有时,优先级为1.0的呼叫仅在大量低优先级请求完成时才会启动。 Apple(documentation)确认:
向主机提供有关如何确定URL会话任务优先级的提示 您的应用,为每项任务指定优先级。指定优先级 仅提供提示,但不保证性能。 [...] 没有API可以让您确定任务的有效优先级 从主持人的角度来看。
我希望实现推定下载和缓存,而不会降低用户发起的请求的性能。这对连接较差的设备尤为重要。
我考虑过的解决方案:
URLSession.shared.dataTask(with: request) { data, response, error in
if let data = data, let response = response {
// Handle response
} else {
// Handle error
}
}
task.priority = priority
并行下载,拥有优先级队列,并在高优先级请求进入时中止/暂停非常低优先级的请求。但是,对我来说,这听起来像是必须的已经存在,如果实施错误,也有点像用脚射击自己的奇妙方式。我考虑的替代方案:
我支持iOS 9及更新版本,但也会考虑在iOS 9上无效的解决方案。