0

我想取消一个Asynctaskin android 但我的实现有问题:

我的代码是:

私有类 SynchroTask 扩展 AsyncTask{ 私有 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;

                }   
            }

        });
4

2 回答 2

2

这是您所做工作的一半实施

   mSynchroTask.cancel(true);

可以通过调用 cancel(boolean) 随时取消任务。调用此方法将导致对 isCancelled() 的后续调用返回 true。调用此方法后,将在 doInBackground(Object[]) 返回后调用 onCancelled(Object),而不是 onPostExecute(Object)。

这就是你所缺少的

为了确保尽快取消任务,如果可能(例如在循环内),您应该始终从 doInBackground(Object[]) 定期检查 isCancelled() 的返回值。

来源:http: //developer.android.com/reference/android/os/AsyncTask.html

于 2012-09-03T19:54:04.953 回答
0
if (mSynchroTask != null && mSynchroTask.getStatus() != AsyncTask.Status.FINISHED){
                mSynchroTask.cancel(true);
                mSynchroTask = null;

                HDCApplication.hdcAppManager.mSynchroManager.removeAllTask();

            }  
于 2012-09-03T19:48:21.973 回答