クラスのgetInputStream
メソッドで問題が発生しました。URLConnection
他のスレッドで議論されている他の同様の問題がいくつかあることは承知していますが、私の場合、単一の解決策は機能していないようです。
面白いことに、最初の実行がうまくいくと、それ以降は失敗 (ブロック) します。この問題を説明する前に、背景を書きたいと思います。ここにあります。
基本的に、私は単純なクライアントサーバー構成を持っています。クライアント アプリでサーバー アドレスとポートをハードコーディングしたくないので、nginx
実際の接続パラメーターを取得できる HTTP サーバー ( ) を使用します。
クライアント側には、サービスによって制御される「ネットワーク スレッド」があります。サービスはスレッドを開始し、必要に応じてスレッドを中断できます。run()
メソッドの冒頭で、次の関数が呼び出されます。
private ConnectionParameters obtainConnectionParameters(String url) throws MalformedURLException, IOException {
URLConnection connection = new URL(url).openConnection();
InputStream in = connection.getInputStream(); // here the problem occurs
... // do some processing
in.close();
return connectionParameters;
}
接続パラメーターが取得されると、別のソケット接続が開かれます。しばらくすると、スレッドが閉じられるか、単にrun()
メソッドの最後に到達する可能性があります。きれいに終了することを再確認しました。
問題に戻ると、何が原因でこれが発生するのかわかりません。この動作を引き起こしている可能性のある手がかりはありますか?
サービスとネットワーク スレッドは、アクティビティとは別の (バックグラウンド) プロセスで実行されていることにも言及したいと思います。このプロセスでURLConnection
が使用される場所は他にありません。obtainConnectionParameters
メソッドで使用されるすべての変数がローカルであることは注目に値します。
説明に欠けているものは何もないと思います。それ以外の場合はお知らせください。投稿を編集できます。
編集 (1):
スレッドMake an HTTP request with android のように apache HTTP client を試したところ
、うまくいきました。ただし、何が問題なのかを知りたいURLConnection
です。