我想在Android中取消Asynctask
,但我的实现有问题:
我的代码是:
私有类SynchroTask扩展了AsyncTask { private volatile boolean running = true;
@Override
protected void onPreExecute() {
super.onPreExecute();
//INITIALIZATIONS
}
@Override
protected Void doInBackground(Void... params) {
while (running) {
//TASK
}
return null;
}
@Override
protected void onCancelled(){
super.onCancelled();
running = false;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
Intent intent = AccountAddActivity.getIntent(getActivity());
startActivity(intent);
getActivity().finish();
}
}
}
并且:
mSynchroTask = new SynchroTask();
cancelButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
if (mSynchroTask != null && mSynchroTask.getStatus() != AsyncTask.Status.FINISHED){
HDCApplication.hdcAppManager.mSynchroManager.removeAllTask();
mSynchroTask.cancel(true);
mSynchroTask = null;
}
}
});
答案 0 :(得分:2)
这是你所做的一半的实施
mSynchroTask.cancel(true);
可以通过调用cancel(boolean)随时取消任务。 调用此方法将导致后续调用isCancelled() 返回true。在调用此方法之后,改为onCancelled(Object) 之后将调用onPostExecute(Object) doInBackground(Object [])返回。
这是你缺少的
确保取消任务 你应该尽快检查返回值 如果可能的话,定期从doInBackground(Object [])获取isCancelled() (例如在循环内部。)
来源:http://developer.android.com/reference/android/os/AsyncTask.html
答案 1 :(得分:0)
if (mSynchroTask != null && mSynchroTask.getStatus() != AsyncTask.Status.FINISHED){
mSynchroTask.cancel(true);
mSynchroTask = null;
HDCApplication.hdcAppManager.mSynchroManager.removeAllTask();
}