在AsyncTask中中止AsyncTask

时间:2015-08-21 17:58:53

标签: android android-asynctask

如何从此AsyncTask中实现的ProgressDialog中取消AsyncTask。

@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?

2 个答案:

答案 0 :(得分:0)

对话框和AsyncTask都有一个'取消'方法,所以当您在对话框中调用取消时,它会取消对话框。

解决方案是让对话框调用AsyncTask的cancel函数。从问题中的代码我可以非常推断对话和任务在代码中的链接方式,但实质上,如果......

AsyncTask myAT;

然后在对话框中:

myAT.cancel();

答案 1 :(得分:0)

呼叫

fdescribe

MyAsyncTask.this.cancel(true); 内。

此处DialogMyAsyncTask子类的名称。

注意:如果在AsyncTask

内实例化Dialog,这将有效(仅限)