【发布时间】:2011-08-17 18:04:00
【问题描述】:
我有一个我编写的应用程序可以在模拟器中完美运行。当我把它放在设备上时它没有。
它执行一个 HttpRequest 来获取和解析所有包含我要下载的缩略图的所有 url 的 xml。一旦完成所有这些并关闭线程,它将创建一个新线程,该线程循环遍历所有 url 并请求/下载缩略图(每个 XML 请求一次 7 个)。它适用于前 14-28 次下载,然后一两次会失败。我的问题是,我怎样才能得到代码:
_connFact.setAttemptsLimit(2);
_connFact.setRetryFactor(500);
_connFact.setTimeLimit(500);
_connFact.setConnectionTimeout(2000);
_connFact.setTimeoutSupported(true);
//Hangs on the line below for 2-5 minutes on the ones that it failed to download
//trans[i] is just a list of Transports that I've prechecked for coverage and availability
for (int i = 0; i < trans.length; i++){
_httpsConn = (HttpsConnection)_connFact.getConnection(URLFactory.EncodeUrl(trans[i], _url), trans[i], null).getConnection();
if (_httpsConn != null){
break;
}
}
如果连接失败就死掉。我宁愿让应用程序继续并显示损坏的缩略图,然后在每次失败时挂起 2 分钟以上。
【问题讨论】:
-
从未在黑莓上编程,但在我看来你应该创建 2 个工厂。 1 第一个请求超时,长超时,其他缩略图请求不重试。
-
此代码仅用于缩略图请求。我调用这个函数 7 次,_url 是每个缩略图的位置
-
@DFTR:+1。尽管
_connFact.setConnectionTimeout(2000);(2 秒超时)它仍然需要 2+ 分钟...我有你描述的相同问题(我不使用ConnectionFactory,但我使用Connector.open(url)来获得HttpConnection) .当我进行批量图像下载(我一张一张地下载图像 - 每个图像使用自己的新连接)时,有时(大约十个请求)它会挂起 2+ 超时。我仍然不知道为什么会发生这种情况以及如何解决它。即使在模拟器上也会发生这种情况,BB 传输是 100% 永久可用的。 -
它也用尽了可用的设备连接。无论您的交通工具是什么(wifi、3g 等),您都不能做任何事情,直到您等待 2-5 分钟,或者回收收音机。我很想拥有一个新的 9850 或其他东西,看看 BBOS7 是否这样做。
-
@DFTR:你知道吗.. 我有一个想法可以尝试 - 如果你在开始新下载之前设置 1 或 2 秒延迟(当然是在非 UI 主题上)怎么办?这是为了确保操作系统有足够的空闲时间来释放它可能仍为已执行的连接保留的所有资源。
标签: blackberry https timeout connection