2011-12-07 69 views
4

我写了一个简单的HTTP GET请求,并且每隔X分钟会请求一个URL,这有点问题。这个过程在GET请求中停止,我每天有一两次。Android:进程已经死亡 - 资源不足?

这里的调试日志的例子:

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

看起来像Android杀死了你的进程,因为它在后台运行,它需要内存。 – THelper

+0

可以防止这种情况吗? –

+0

是(通过使用服务)和否(服务仍然可以在低内存中被Android杀死,但不太可能)。阅读[本博客](http://android-developers.blogspot.com/2010/04/multitasking-android-way.html),特别是关于“在后台显式运行”的部分。 – THelper

回答

2

如果我理解正确的,你你问两两件事:

  • Q1:为什么没有在指定的超时工作?第二季度销售价格为
  • 。为什么这个过程会死?

从Q2开始,我的猜测是你的进程被终止,因为超时无效并且你的代码花了太长时间才能运行。结果是Android杀死了它。

至于Q1:我做了一些试验,并注意到在模拟器中,超时功能在我的应用程序中也不起作用。使用仿真器API7和API8进行测试,无论设置的超时时间长短如何,我都会在约20秒后获得UnknownHostException。这适用于DefaultHttpClient以及HttpUrlConnectionAndroidHttpClient

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

所提出的解决方案中没有工作对我来说,所以我猜只有reli能够解决的办法是自己管理超时。

+0

一起使用没有找到任何样品做这件事,你有没有意外样品? :) –

+0

我注意到超时问题只出现在模拟器中。在设备上测试我的速度更快了(甚至在设置的超时值内!)。不过,我决定保留当前的代码,所以很遗憾我没有自己管理超时的例子,但是[这篇文章](http://stackoverflow.com/q/2356670/741249)可能会有所帮助。 – THelper