0

AsynctaskAndroid でキャンセルしたいのですが、実装に問題があります。

私のコードは次のとおりです。

プライベート クラス SynchroTask extends 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;

                }   
            }

        });
4

2 に答える 2

2

それはあなたがしたことの実装の半分です

   mSynchroTask.cancel(true);

cancel(boolean) を呼び出すことで、いつでもタスクをキャンセルできます。このメソッドを呼び出すと、後続の isCancelled() の呼び出しで true が返されます。このメソッドを呼び出すと、onPostExecute(Object) の代わりに onCancelled(Object) が doInBackground(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 に答える