私はAsyncTask
をかなり使いましたが、私は混乱している一見単純な質問に出くわしました。問題は次のとおりです。AsyncTaskのpublishProgressメソッドは非同期ですか?
はすぐに を返しますか?言い換えれば、このメソッドは非同期ですか?
いくつかのコンテキスト:
私は次のコード
-
かかわらず、応答の
- 火災HTTPリクエストごとに3秒、OR
- 火災かどうかを判断しようとしていますHTTP要求が応答を待ってからとなると、は3秒間スリープしてから次の要求を発します。
パブリッククラスMyAsyncTask {
@Override
protected void doInBackground(String... params) {
while (mRunning) {
// Call publishProgress
this.publishProgress(makeHttpRequest());
// Sleep for 3 seconds
synchronized (lock) {
try {
lock.wait(3 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
return null;
}
private HttpResponse makeHttpRequest() {
HttpResponse ajaxResponse = null;
Throwable throwable = null;
try {
ajaxResponse = mHttpClient.execute(mHttpGet);
} catch (ClientProtocolException e) {
// Handle exception
} catch (IOException e) {
// Handle exception
} catch (Exception e) {
// Handle exception
}
return ajaxResponse;
}
@Override
protected void onProgressUpdate(HttpResponse... values) {
// Do something with the response
}
}
ドキュメンテーションを読んでも邪魔にならない.... 'publishProgress ...このメソッドは、バックグラウンド計算がまだ実行されている間、ユーザーインターフェイスに進行状況を表示するために使用されます。例えば、プログレスバーをアニメーション化したり、テキストフィールドにログを表示したりするのに使うことができます。 ' – Selvin
これを読んで理解したのは、進行中のものが公開されている間でも' doInBackground() 'が実行され続けることです。私はそれから何かを結論づけることはできませんでした。私は間違っているかもしれません - それで私はここでこの質問をしました。 – curioustechizen
まだ、HttpResponseをonProgressUpdate(Progress ...)に送信することは意味がありません。なぜなら、あなたはUIスレッドでの応答処理を行い、これがANRに提供できるからです。UIコードと処理コードを分離する必要があります – Selvin