2

AsyncTask を使用してサーバーにログインし、接続が終了する前に進行状況ダイアログを表示したいと考えています。

リクエストに対する応答がない可能性があるため、AsyncTask のタイムアウト値を設定する必要があります。単純に を使用する.execute()と、プログラムは正常に動作しますが、タイムアウト機能が実装されていないことがわかりました。を使用する.get(1000, TimeUnit.MILLISECONDS)と、プログラムが 1 秒間だけ停止し、進行状況ダイアログが表示されません。

.get(1000, TimeUnit.MILLISECONDS)が呼び出されたときにタスクが実行されるかどうかを教えてくれる人はいますか? はいの場合、実行の兆候がない理由。そうでない場合、AsyncTask のこのタイムアウト機能をどのように実装できますか?

4

4 に答える 4

3

AsyncTask.get()は、メインスレッド(別名。UIスレッド)にある場合、実行をブロックします。

おそらく別のスレッドで呼び出す必要があります。

編集

Vogellaはこれについて非常に素晴らしい記事を作成しました:AndroidPerformance:Androidスレッド、ハンドラー、AsyncTask

ここからコードを取得しました。メインのUIスレッドをブロックすることなく、正常に機能することを保証します。

于 2012-10-30T16:05:38.313 に答える
0

documentationから、get(long timeout, TimeUnit unit)メソッドは指定された期間待機してから、タスクのキャンセルを試みます。cancel()これでできることは、接続で何らかのタイムアウトを実行するのAsyncTaskではなく、 を呼び出すことだけだと思います。ある種の長いダウンロードを実行している場合はisCancelled、ループをチェックできます。ただし、ある種の接続タイムアウトを与えようとしているだけの場合はget、それを行う方法ではありません。

getまた、戻るまでメインスレッドをブロックすることに注意してください。これは、メソッドの「タイムアウト」バージョンと基本バージョンの両方に当てはまります。したがって、これは非同期操作ではありません。

接続タイムアウトを取得するには、タスク自体ではなく、作成した実際の接続でこれを実行する必要があります。HttpUrlConnectionと の両方でこれを行う方法がありますHttpClient

于 2012-10-30T17:07:07.420 に答える
0

この状況を処理するためのより良いオプションである HttpUrlConnection オブジェクトにタイムアウト間隔を設定する必要があると思います。

于 2012-10-30T16:10:04.690 に答える
0

使用する場合、AndroidHttpClient事前に設定された優れた接続タイムアウトがあります。

于 2012-10-30T16:34:02.413 に答える