如何在Android中完全杀死/删除/删除/停止AsyncTask

Ada*_*gyi 26 android android-asynctask

我制作了一个从我们的服务器上下载视频的应用.问题是:

当我取消下载时,我打电话:

myAsyncTask.cancel(true)
Run Code Online (Sandbox Code Playgroud)

我注意到,这myAsyncTask不会停止呼叫取消...我ProgressDialog仍然上升,就像从状态跳到状态显示我每次取消并再次启动时AsyncTask通过单击下载按钮,新的AsyncTask启动...每个时间我点击下载..然后取消,然后再次单独下载AsyncTask启动.

为什么myAsynTask.cancle(true)不取消我的任务?我不再想要它了.如果我点击取消,我只想完全关闭它.

怎么做 ?

编辑:

感谢gtumca-MAC,以及帮助我​​的其他人做到了:

while (((count = input.read(data)) != -1) && (this.isCancelled()==false)) 
{
    total += count;
    publishProgress((int) (total * 100 / lenghtOfFile));
    output.write(data, 0, count);
}
Run Code Online (Sandbox Code Playgroud)

谢谢!!!

MAC*_*MAC 56

AsyncTask不会取消进程

myAsynTask.cancel(true) 
Run Code Online (Sandbox Code Playgroud)

为此,你必须手动停止它.

例如,您正在doInBackground(..)使用while/for循环下载视频.

protected Long doInBackground(URL... urls) {

         for (int i = 0; i < count; i++) {
          // you need to break your loop on particular condition here

             if(isCancelled())
                  break;             
         }
         return totalSize;
     }
Run Code Online (Sandbox Code Playgroud)

  • 有人告诉我什么时候iscancelled()会被调用? (4认同)

小智 6

在你的课堂上声明

DownloadFileAsync downloadFile = new DownloadFileAsync();
Run Code Online (Sandbox Code Playgroud)

然后在创建

DownloadFileAsync downloadFile = new DownloadFileAsync();
downloadFile.execute(url);
Run Code Online (Sandbox Code Playgroud)

在你的背景 ()

if (isCancelled())
    break;

@Override
protected void onCancelled(){

}
Run Code Online (Sandbox Code Playgroud)

你可以通过以下方式杀死你的 AsyncTask

downloadFile.cancel(true);
Run Code Online (Sandbox Code Playgroud)