2011-01-13 9 views
0

HttpPostの実行が失敗した後、http-clientを再利用する際に問題が発生しています。それはタイムアウトまたは利用できないサービス(他人かもしれない)である可能性があります。要求はソケットタイムアウトをスローする可能性があります。後でクライアントを使用すると(新しいHttpPostオブジェクトで)、不正な状態の例外がスローされます。私の研究では、2つのスレッドがあり、2つ目のスレッドがhttp-clientを使用する前にリクエストを処理しているときに自然に発生する場合のように、ソケットに「再利用」がマークされていない従ってそのソケット)。Androidでは、例外がスローされたときにDefaultHttpClientがHttpPostを適切にクリーンアップしますか?

http-clientコードにバグがありますが、正しく実行されていない「ベストプラクティス」や既知の回避策があります。

これについての助けに感謝します。

答えて

2

私の研究は、2つのスレッドがあり、2つ目のスレッドが要求を処理している間に自然に発生する場合のように、ソケットに「再利用」が設定されていない場合に発生するhttp-client(それゆえソケット)を使用してください。

HttpClientはデフォルトではスレッドセーフではありません。 ThreadSafeClientConnManagerを使用する必要があります。

+0

OK、私はスレッドセーフクライアント接続マネージャですが、シリアル化されている(つまり、作業キューを介して)場合、安全に動作するはずです。しかし、別の要求に続く例外の質問はどうでしょうか。 – mobibob

+0

私はちょうどThreadSafeClientConnManagerを追加しましたが、別の質問があります(別に投稿しますか?)アプリケーションライフサイクルでhttpClientを呼び出すのが楽しい時です。 getConnectionManager()。シャットダウン()?私はIntentServiceでそれを使用しています。 – mobibob

+0

@mobibob: "しかし、別の要求に続く例外の問題はどうですか?"私はそれが例外の性質に少し依存するだろうと思います。 StackOverflowでHttpClientサポートがどれくらいサポートされているかわからないので、HttpClientメーリングリストのような質問をすることを検討するかもしれません。 "アプリケーションライフサイクルで、httpClient。getConnectionManager()。shutdown()を呼び出すのは良いタイミングですか?IntentServiceで使用しています。 'onCreate()'に 'HttpClient'を作成すると、おそらく' onDestroy() 'になります。 – CommonsWare

関連する問題