Android 在AsyncTask中中止AsyncTask

Android 在AsyncTask中中止AsyncTask,android,android-asynctask,Android,Android Asynctask,如何从此异步任务中实现的ProgressDialog中取消异步任务 @Override protected Void doInBackground(Void... params) { try { FTPHelper ftpHelper = new FTPHelper(_context); ftpHelper.SincronizarArquivos(); } catch... @Override protected void o

如何从此异步任务中实现的ProgressDialog中取消异步任务

@Override
protected Void doInBackground(Void... params) 
{
    try 
    {
        FTPHelper ftpHelper = new FTPHelper(_context);
        ftpHelper.SincronizarArquivos();
    }
    catch...

@Override
protected void onPreExecute() 
{
    _dialog.setMessage("Aguarde, sincronizando arquivos...");
    _dialog.setCancelable(false); 
    _dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancelar", new DialogInterface.OnClickListener() 
    { 
        @Override 
        public void onClick(DialogInterface dialog, int which)
        {
            // This not works for cancel AsyncTask
            cancel(true);
            ...

由于doInBackground(Void…params)中没有循环,因此我取消或返回。如何从ProgressDialog中取消AsyncTask?

对话框和AsyncTask都有一个“cancel”方法,因此当您在对话框中调用cancel时,它会取消对话框

解决方案是让对话框调用AsyncTask的cancel函数。从问题中的代码,我不能很好地推断对话框和任务在代码中的链接方式,但本质上,如果

AsyncTask myAT;
然后在对话框中:

myAT.cancel();
召唤

对话框中

这里的
MyAsyncTask
AsyncTask
子类的名称


注意:如果
对话框
异步任务

中实例化,则(仅)这将起作用。您似乎应该在
FTPHelper.SincronizarArquivos
方法中实现一些要检查的标志,然后在
onClick
回调上设置该标志。
MyAsyncTask.this.cancel(true);