我写了一个简单的HTTP GET请求有一点问题,我会每X分钟请求一个URL。我每天都有一两次这个过程在GET请求中停止了。
以下是调试日志的示例:
12-07 16:29:22.650 V/TAG(11655): Executing HTTP Request
12-07 16:29:25.336 D/dalvikvm(11655): GC_CONCURRENT freed 366K, 50% free 2824K/5639K, external 0K/0K, paused 3ms+3ms
12-07 16:29:25.526 D/dalvikvm(11655): GC_CONCURRENT freed 450K, 52% free 2825K/5767K, external 0K/0K, paused 2ms+2ms
12-07 16:29:29.990 I/ActivityManager( 1339): Process PackageName:remote (pid 11655) has died.
12-07 16:29:29.990 I/ActivityManager( 1339): Low Memory: No more background processes.
现在这给我带来了两个问题:
首先,我指定的超时不起作用:
HttpParams httpParameters = new BasicHttpParams();
int timeoutConnection = 10000;
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
int timeoutSocket = 10000;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
HttpClient client=new DefaultHttpClient(httpParameters);
HttpGet request=new HttpGet(url);
Log.v(TAG,"Executing HTTP Request");
HttpResponse response=client.execute(request);
第二个问题是,我看不出这个过程已经死亡的原因 - 如果由于内存不足而被杀死,这个“死亡”信息是否相同?因为此处未达到超时(client.execute位于try / catch块中)
感谢您的回复!
答案 0 :(得分:2)
如果我理解你的话,你会问两件事:
从Q2开始,我的猜测是你的进程被终止,因为超时不起作用,你的代码运行时间太长。结果Android杀了它。
至于Q1:我做了一些实验,并注意到在模拟器中,超时在我的应用程序中也不起作用。使用模拟器API7和API8进行测试我总是在大约20秒后获得UnknownHostException
,无论任何设置超时。这适用于DefaultHttpClient
以及HttpUrlConnection
和AndroidHttpClient
。
谷歌搜索显示,其他人也报告了超时问题:
所提议的解决方案都不适合我,所以我想唯一可靠的解决方案就是自己管理超时。