重複の可能性:
実行中のAsyncTaskをキャンセルする理想的な方法
Androidアプリケーションを開発したとき、AsyncTask
何かをダウンロードするために、を使用してprogressDialog
、このAsyncTaskの進行状況を表示しました。今、戻るボタンを押すと、このAsycTaskをキャンセルしたいのですが、を呼び出しましたAsycTask.cancel()
が、機能しません。 。実行中のAsyncTaskをキャンセルするにはどうすればよいですか?
重複の可能性:
実行中のAsyncTaskをキャンセルする理想的な方法
Androidアプリケーションを開発したとき、AsyncTask
何かをダウンロードするために、を使用してprogressDialog
、このAsyncTaskの進行状況を表示しました。今、戻るボタンを押すと、このAsycTaskをキャンセルしたいのですが、を呼び出しましたAsycTask.cancel()
が、機能しません。 。実行中のAsyncTaskをキャンセルするにはどうすればよいですか?
class ImplementAsynctask extends AsyncTask implements OnDismissListener{
ProgressDialog dialog = new ProgressDialog(ActivityName.this);
protected onPreExecute() {
//do something and show progress dialog
}
protected onPostExecute() {
//cancel dialog after completion
}
@Override
public void onDismiss(DialogInterface dialog) {
//cancel AsycTask in between.
this.cancel(true);
}
};
これを行う最も正しい方法はdoInBackground
、タスクがキャンセルされたかどうかを定期的にチェックすることです(つまり、を呼び出すことによってisCancelled
)。http://developer.android.com/reference/android/os/AsyncTask.htmlから:
タスクのキャンセル:
タスクは、を呼び出すことでいつでもキャンセルできます
cancel(boolean)
。このメソッドを呼び出すと、後続の呼び出しで
isCancelled()
が返されtrue
ます。このメソッドを呼び出した後
onCancelled(Object)
、ではなく、onPostExecute(Object)
が戻り後に呼び出されdoInBackground(Object[])
ます。タスクができるだけ早くキャンセルされるようにするには、可能であれば、isCancelled()の戻り値を定期的にチェックする必要がありますdoInBackground(Object[])
(たとえば、ループ内)。
詳細については、このブログ投稿も確認してください:http: //vikaskanani.wordpress.com/2011/08/03/android-proper-way-to-cancel-asynctask/
戻るボタンをクリックして次の手順を実行します。
次のように、Aynctaskをグローバル変数として宣言します。
//AysncTask class
private contactListAsync async;
if(async != null){
async.cancel(true);
async= null;
}