在 iOS 应用中处理大量 API 请求(不使用 Alamofire)
Handling large number of API requests in iOS App (Not using Alamofire)
如何处理应用程序进入前台引发大量请求(最少约 3-4 个)的状态,因为应用程序需要该信息,然后进入后台?
我尝试的是使用 RequestManager 来 suspend
URLSessionDataTasks
当应用程序进入后台并且当应用程序恢复时,再次 resume
这些任务。但是我觉得这个效果不是很好。
是否有解决此问题的标准方法?
暂停任务将不起作用,因为如果您的应用程序因内存不足而被丢弃,会话将不再存在。
最直接的方法是在后台会话中使用下载任务,然后在下载完成后读取生成的临时文件。在后台会话中下载和上传任务是唯一可以在您的应用程序因内存压力而在后台被抛弃时幸存下来的任务类型。
如果您绝对必须避免在应用程序处于后台时下载(为什么?),您可以在前台或后台会话中创建下载任务,然后停止当您的应用进入后台时,通过调用 cancelByProducingResumeData:
下载任务。您稍后可以通过调用 downloadTaskWithResumeData:
.
继续请求
不过,这种方法有一个相当大的警告,那就是 API 的简历数据部分几乎没有像后台下载部分那样得到很好的测试。例证:在 iOS 10 从第一个 beta 到 10.2 的每个版本中,对简历数据的支持 完全 中断。 (如果您选择走那条路,还有一个 。)
所以我会推荐第一种方法,除非你有一些合同或法律义务不这样做。
如何处理应用程序进入前台引发大量请求(最少约 3-4 个)的状态,因为应用程序需要该信息,然后进入后台?
我尝试的是使用 RequestManager 来 suspend
URLSessionDataTasks
当应用程序进入后台并且当应用程序恢复时,再次 resume
这些任务。但是我觉得这个效果不是很好。
是否有解决此问题的标准方法?
暂停任务将不起作用,因为如果您的应用程序因内存不足而被丢弃,会话将不再存在。
最直接的方法是在后台会话中使用下载任务,然后在下载完成后读取生成的临时文件。在后台会话中下载和上传任务是唯一可以在您的应用程序因内存压力而在后台被抛弃时幸存下来的任务类型。
如果您绝对必须避免在应用程序处于后台时下载(为什么?),您可以在前台或后台会话中创建下载任务,然后停止当您的应用进入后台时,通过调用 cancelByProducingResumeData:
下载任务。您稍后可以通过调用 downloadTaskWithResumeData:
.
不过,这种方法有一个相当大的警告,那就是 API 的简历数据部分几乎没有像后台下载部分那样得到很好的测试。例证:在 iOS 10 从第一个 beta 到 10.2 的每个版本中,对简历数据的支持 完全 中断。 (如果您选择走那条路,还有一个
所以我会推荐第一种方法,除非你有一些合同或法律义务不这样做。