我写了一个简单的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块中)
谢谢你的回复!
最佳答案 如果我理解你正确,你会问两件事:
> Q1:为什么指定的超时不起作用?
> Q2.为什么这个过程死了?
从Q2开始,我的猜测是你的进程被终止,因为超时不起作用,你的代码运行时间太长.结果Android杀了它.
至于Q1:我做了一些实验,并注意到在模拟器中,超时在我的应用程序中也不起作用.使用模拟器API7和API8进行测试我总是在大约20秒后得到UnknownHostException,无论设置超时是多少.这适用于DefaultHttpClient以及HttpUrlConnection和AndroidHttpClient.
谷歌搜索透露,其他人也报告了超时问题:
> http://code.google.com/p/android/issues/detail?id=2409
> Http connection timeout on Android not working
> http connection timeout issues
> Socket timeout when making HTTPGet requests using DefaultHTTPClient
所提出的解决方案都不适合我,所以我想唯一可靠的解决方案就是自己管理超时.