iOS上的网络呼叫优先级

时间:2017-07-12 07:42:04

标签: ios swift nsurlsession urlsession

我想在iOS上利用网络呼叫的优先级。

到目前为止,我正在使用target "PROJECT_NAME" do pod 'FlurrySDK' end 。我创建这样的网络呼叫:

URLSessionTask.priority

问题是我仍然看到优先级为0.0的下载任务一旦启动就会从优先级为1.0的任务中获得大量负载(最多约60%)。有时,优先级为1.0的呼叫仅在大量低优先级请求完成时才会启动。 Apple(documentation)确认:

  

向主机提供有关如何确定URL会话任务优先级的提示   您的应用,为每项任务指定优先级。指定优先级   仅提供提示,但不保证性能。 [...]   没有API可以让您确定任务的有效优先级   从主持人的角度来看。

我希望实现推定下载和缓存,而不会降低用户发起的请求的性能。这对连接较差的设备尤为重要。

我考虑过的解决方案:

  • 使用Alamofire(但是afaik他们也没有优先次序)
  • 创建一个自定义解决方案,只允许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上无效的解决方案。

0 个答案:

没有答案