http请求---请为我设置超时时间

来源:互联网 发布:未来网络发展调研报告 编辑:程序博客网 时间:2024/05/07 07:59
  

    下午在调试一个自动升级的功能,升级时突然拔掉网线,程序应该马上提示网络断开,升级失败。但是在某些厂商的鸡腚核上进度条始终停在某个位置,不报错也不崩溃,死在了那里。

    因为是断网环境,所以看不到logcat打印出来的日志。只好研究了断网日志是如何输出的,参见 断网日志输出到SD卡 --http://www.67tgb.com/?p=582

    不得不说日志是个好东西,在我们看不到的角落,忠诚的记载着应用内部发生的一切变化。

    通过打印一些方法的执行时间,发现在使用HttpUrlConnect打开网络连接之后,程序阻塞在了InputStream 的read()的方法上。这个方法本来就是一个阻塞的方法,一直在等待读取网络端的数据,本身会抛出IO异常。

    在某些盒子上,拔掉网线会迅速抛出IO异常,但是有的盒子则始终处于阻塞状态。仔细读了一些API才猛然发现,自己没有为Http请求设置连接超时和读取超时。

    虽然是很小的一个问题,但是却找了很长时间才确定。写篇博客牢记以下。

    DefaultHttpClient 设置超时方式如下:

    

DefaultHttpClient client = new DefaultHttpClient(); client.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 15000); client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 15000);

    现实生活也是这样的,比如打电话,呼叫超过一分钟没人接听,则自动断开通话,防止阻塞信道。