http请求---请为我设置超时时间
程序开发
2023-09-14 06:20:22
下午在调试一个自动升级的功能,升级时突然拔掉网线,程序应该马上提示网络断开,升级失败。但是在某些厂商的鸡腚核上进度条始终停在某个位置,不报错也不崩溃,死在了那里。
因为是断网环境,所以看不到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);
现实生活也是这样的,比如打电话,呼叫超过一分钟没人接听,则自动断开通话,防止阻塞信道。
标签:
上一篇:
IT从业者看《从优秀到卓越》
下一篇:
相关文章
-
无相关信息