我正在开发一个执行大量 API 获取的应用程序,如果互联网连接非常低,比如 5 kbps,应用程序会在该main
方法中崩溃。我认为当队列中有很多请求时会发生这种情况,因此操作系统会终止应用程序。我正在使用 ASIHTPPRequest 和基于块的异步请求。
我该如何解决这个问题?
我正在开发一个执行大量 API 获取的应用程序,如果互联网连接非常低,比如 5 kbps,应用程序会在该main
方法中崩溃。我认为当队列中有很多请求时会发生这种情况,因此操作系统会终止应用程序。我正在使用 ASIHTPPRequest 和基于块的异步请求。
我该如何解决这个问题?
您需要为整个应用程序使用单个网络队列。严重依赖 Internet 连接的应用程序应优化并发网络操作的数量。不幸的是,ASIHTPPRequest
框架不这样做。我建议您使用MKNetworkKit
已构建的,特别是牢记移动应用程序。
大多数移动网络 (3G) 不允许来自给定 IP 地址的两个以上并发 HTTP 连接。边缘更糟糕。在大多数情况下,您不能打开多个连接。在传统的家庭宽带 (Wifi) 上,这个限制相当高(六个)。在任何正常情况下,iDevice 大多连接到 3G 网络,这意味着您只能并行上传两张照片。现在,伤害的不是缓慢的上传速度。
当您打开一个加载照片缩略图的视图(比如在不同的视图上)而此上传操作在后台运行时,就会出现真正的问题。当您没有正确控制整个应用程序的队列大小时,您的缩略图加载操作将超时,这并不是真正的正确方法。执行此操作的正确方法是优先考虑您的缩略图加载操作或等到上传完成并加载缩略图。这要求您在整个应用程序中拥有一个队列。MKNetworkKit 通过为它的每个实例使用一个共享队列来自动确保这一点。虽然 MKNetworkKit 本身不是单例,但共享队列是。