2011-12-07 9 views
4

私は書いた簡単なHTTP GET要求に少し問題があり、X分ごとにURLを要求します。私はGETリクエストの途中でプロセスが停止したことを1日に1〜2回は持っていました。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. 

今、この私だけのための2つの問題投げ:

  • まず、私が指定したタイムアウトは動作しません。

    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); 
    
  • 第2の問題は、プロセスが終了した理由がわかりません。この「死んだ」メッセージは、メモリが足りなくなって殺されている場合も同じですか?ここでタイムアウトに達していないため(クライアント/実行ブロックはtry/catchブロック内にあります)

あなたの返信ありがとうございます!

+1

Androidが、バックグラウンドで実行されていたためにメモリが必要だったため、プロセスが強制終了されたようです。 – THelper

+0

これを防ぐことはできますか? –

+0

はい(サービスを使用して)といいえ(Androidでメモリが足りなくなってもサービスは強制終了される可能性があります)。 [このブログ](http://android-developers.blogspot.com/2010/04/multitasking-android-way.html)を読んでください。特に「明示的にバックグラウンドで実行する」の部分です。 – THelper

答えて

2

私が正しくあなたを理解している場合、あなたは二つのことを求めている:

  • Q1:なぜ、指定されたタイムアウトが動作しませんの?
  • Q2。なぜプロセスは死んだのですか?

Q2からは、タイムアウトが機能せず、コードが実行に時間がかかりすぎてプロセスが強制終了されたと思います。その結果Androidはそれを殺した。

Q1について:私はいくつか試してみましたが、エミュレータではタイムアウトが私のアプリケーションでもうまくいきませんでした。エミュレータAPI7とAPI8でテストすると、設定されたタイムアウトに関係なく、私はいつも約20秒後にUnknownHostExceptionになります。これは、DefaultHttpClientHttpUrlConnectionAndroidHttpClientになります。

グーグルは、他の人にもタイムアウトの問題を報告していることを明らかにした。提案されたソリューションの

どれも私のために働いていません、だから私は唯一の信念を推測するタイムアウトを自分で管理することができます。

+0

これを行う際にサンプルが見つからない場合、サンプルが偶然にありますか? :) –

+0

私は、タイムアウトの問題はエミュレータでのみ発生することに気づいた。私はタイムアウトをはるかに高速に(設定されたタイムアウト値の中でも!)。それにもかかわらず、私は現在のコードを残しておくことにしました。残念なことに、自分でタイムアウトを管理する例はありませんが、[this post](http://stackoverflow.com/q/2356670/741249)が役立ちます。 – THelper

関連する問題