Android:流程已经死亡 - 资源不足?

时间:2011-12-07 23:58:13

标签: android resources timeout

我写了一个简单的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块中)

感谢您的回复!

1 个答案:

答案 0 :(得分:2)

如果我理解你的话,你会问两件事:

  • Q1:为什么指定的超时不起作用?
  • Q2。为什么这个过程会死?

从Q2开始,我的猜测是你的进程被终止,因为超时不起作用,你的代码运行时间太长。结果Android杀了它。

至于Q1:我做了一些实验,并注意到在模拟器中,超时在我的应用程序中也不起作用。使用模拟器API7和API8进行测试我总是在大约20秒后获得UnknownHostException,无论任何设置超时。这适用于DefaultHttpClient以及HttpUrlConnectionAndroidHttpClient

谷歌搜索显示,其他人也报告了超时问题:

所提议的解决方案都不适合我,所以我想唯一可靠的解决方案就是自己管理超时。