私は、AndroidデバイスからWebサーバーにファイルをアップロードするためにHttpClientを使用する必要があるAndroidアプリケーションで作業しています。私がアップロードしているファイルは1Gbまでのサイズに達することができるので、アップロード中にデバイスの接続が失われるとタイムアウトが発生する可能性があります。奇妙なことは、私がソケットに設定したタイムアウトは何の効果もないようです。 SocketTimeoutExceptionを発生させるのではなく、接続が失われるたびにアプリケーションが停止します。Apache HttpClient 4.0がAndroid上でソケットのタイムアウトに失敗しました
私が使用してみました:
HttpConnectionParams.setConnectionTimeout(params, CrashLogParams.TIMEOUT);
HttpConnectionParams.setSoTimeout(params, CrashLogParams.TIMEOUT);
をが、これは唯一の接続タイムアウトではなく、ソケットタイムアウトのために働いていました。また、私が試した:
HttpParams p = httpclient.getParams();
p.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 10000);
p.setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 10000);
私はアプリケーション
httpclient.execute(httppost);
を実行した後、接続タイムアウトの例外になるだろう、ので、私は、接続タイムアウトが動作することを知っている理由は、アップロード中に接続が失われたときにハングアップするようですただし、アプリケーションがサーバーに正常に接続した後。
私のアプリをテストするために、アプリケーションをどのように反応させるかを確認するために、ネットワークを別の時間に無効にしました。要求を送信する前にネットワークを無効にすると、接続エラーが発生し、アプリケーションで正常に処理できますが、アップロード中に無効にするとアプリケーションがハングアップします。もちろん、AsyncTasksを通じてこれらのリクエストをすべて実行しているので、メインのUIスレッドはクラッシュしません。私は、ソケットがデータを受け取っていないときにタイムアウトするかどうかを確認する他の方法があるかどうか、あるいは私がここで何かを見つけていないのかどうか疑問に思っています。私は多くのブログや投稿を読んだことがありますが、それらのほとんどはSO_TIMEOUTを使って私にはうまくいかないことを示唆しています。
sotimeout not working in a multipart http post on android 2.1
あなたのアプリは、より小さなサイズのファイルで動作しましたか? – momo
1 MBのファイルを試しましたが、バグはまだ残っています。私は小さいファイルでは、ファイルのアップロードの間に何度も切断する可能性が高いと思いますが、その点以外にもあります。ネットワーク障害が発生した場合でもアプリケーションを堅牢にしたいと考えています。 –
アップロードサイズがかなり小さく、数kbのオーダーであることを除いて、私はこれとまったく同じ問題を抱えています。バグを引き起こすために必要と思われるのは、起動しているかどうかをチェックした後、execute()を呼び出す前にネットワークがダウンすることです。 – Michael