取消Android中的AsyncTask

时间:2012-09-03 19:41:40

标签: android android-asynctask

我想在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;

                }   
            }

        });

2 个答案:

答案 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();

            }