HTTP超时机制
kf156 2009-04-16 04:55:58 以下测试在6120c、N73上均如此:
在HTTP连接中,当我代码走CMWAP代理,而手机却设置为CMNET直连时,
打算在HTTP连接时,网络不通时改变连接方式为CMNET,真机上测试是OK的
主要问题就是网络不通时的等待时间长达两分四十秒左右。
具体测试如下:
1.代码走到int responseCode = http.getResponseCode();//HttpConnection http
发生阻塞,测了好多次,阻塞时间均为两分四十秒左右,之后抛出IO异常:-33。改变连接方式为CMNET,网络连接正常。
2.用Timer定时器并设置如果三十秒后,HTTP还是没返回,则运行TimerTask强制将http.close();http=null;
在手机上执行,代码依旧阻塞在http.getResponseCode();这句,三十秒后,TimerTask执行,却阻塞在http.close();这句
两分四十秒左右,抛出IO异常:-33。改变连接方式为CMNET,网络连接正常。
3.将TimerTask里的http.close()去掉,只剩下http=null;
在手机上执行,代码阻塞在http.getResponseCode();这句,三十秒后,TimerTask执行完毕,http被置null
但并未抛出任何异常,直到两分四十秒左右,依旧抛出IO异常:-33。改变连接方式为CMNET,网络连接正常。
有什么办法可以在阻塞在http.getResponseCode();这句时,当超过一个时间后(如上边设置的三十秒),强制抛出个什么异常跳过
以便后边的代码改变连接方式为CMNET后再次尝试连接网络。
以前有强制关闭http并置null,网络连接线程里会立刻抛出IO异常,不知道为什么这次死活会阻塞在那
整了一个下午,郁闷了...