Android プロジェクトで AsyncTask をサブクラス化します。
現在のタスクに時間がかかりすぎる場合に、ユーザーが現在の AsyncTack をキャンセルして新しいタスクを開始できるようにする機能を実装したいと考えています。
MyAsyncTask mat = new MyAsyncTask();
ユーザーがキャンセル ボタンをクリックすると、次のコードを実装して新しいタスクを開始します。
mat.cancel(true);
ただし、古いタスクが終了するまで新しいタスクが開始されないことに後で気付きます。古いタスク トレッドはまだ実行中です。
Google で公式ドキュメントを確認しました。doInBackGroud(Params... params)で次のステートメントを呼び出す必要があるようです。
if (isCancelled()) break;
問題は、以下のコードが時間がかかる原因であることがわかりました。
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
HttpResponse httpResponse = httpClient.execute(httpPost);
しかし、 httpClient.execute(httpPost)の実行中にタスクがキャンセルされたかどうかを確認するにはどうすればよいですか? DefaultHttpClient でオーバーライドできるonProgressChanged(int progress)のようなメソッドはありますか?