2011-11-14 6 views
5

私はそれを押すたびにサーバにアクセスする検索ボタンを持っています。問題は、複数回連続して押すと正常に動作するということです。しかし、5秒待つと、最初のプレスは機能しません。それは単に応答を受信しません。 2回目のプレスは機能しますので、一定時間(〜5秒)待つまで、次のボタンが押されます。Androidのhttpキープアライブソリューションですが、永続的なものですか?

基本的に、5秒以内に新しいものを絶えず探しているのでなければ、何もしない。

これは

  System.setProperty("http.keepAlive", "false"); 

で解決されたしかし、私は、これは新しいTCP接続が、私はそのボタンをクリックするたびに行う必要があり、永続的な接続を取り除くことを読みました。これは遅いですが、バグではありません。

これは不適切な修正ですか?私はこれが本当に何かを修正するものではないことを読んだ。いくつかの助けを感謝します、ありがとう。

+0

私は同様の問題に直面していますが、私はこの行をどこに追加すればいいですか?私は接続する前に、応答を読む前に..? Plsヘルプ – AndroidGuy

+0

申し訳ありませんが、私はまったく覚えていません。私はこの数年前に尋ねた、それ以来アンドロイドの開発をしていません。ちょうどその周りに遊んで – volk

答えて

4

あなたは言った:

をしかし、私は5秒を待っていれば、最初のプレスが機能しません。それは単に応答を受信しません。

あなたのケースでは、サーバーにリクエストが届かないと思います。私は、http.keepAliveをfalseに設定するのは良い解決策だと思います。私はこの問題を調査するのにかなりの時間を費やしましたが、これがAndroidライブラリのバグであることは明らかです。

なぜなら、サーバーは、潜在的に多数の接続が開いているため、それらの接続をすべて開いたままにしたくないため、時々それらの一部が閉じられるためです。しかし、Androidライブラリで使用されている接続プールはこの事実を受け入れたくないので、とにかく古い閉じた接続を使用しようとします。

http.keepAliveの設定を解除するのは解決策ではなく、パフォーマンス上の問題がありますが、信頼できるHTTP処理が可能です。

+0

ありがとう。これは長い時間前からです; p – volk

+0

おそらくあなたはそれ以来よりよい解決策を見つけましたか? –

+0

私は自分の質問に書いた修正を行って、しばらくの間はアンドロイドで作業していないことを覚えています;申し訳ありません – volk

0

ClientConnectionManagerは、内部的に操作された接続を管理しますが、ManagedClientConnectionのインスタンスを引き渡します。このインタフェースは、基本となるソケット操作を抽象化し、ルートを確立するためにソケットを開いたり更新したりする便利なメソッドを提供します。オペレータは、接続マネージャによってカプセル化され、自動的に呼び出されます。

org.apache.http.conn

+0

あなたの答えをありがとう、しかし、私はこの質問に答えるかどうかわからない – volk

関連する問題