Android 如何在AsyncTask中处理isCancelled

Android 如何在AsyncTask中处理isCancelled,android,android-asynctask,Android,Android Asynctask,我正在尝试将此代码添加到我的doInBackGround,以便在用户按下后退按钮时捕获正在设置的标志 protected Long doInBackground(URL... urls) { int count = urls.length; long totalSize = 0; for (int i = 0; i < count; i++) { totalSize += Downloader.download

我正在尝试将此代码添加到我的
doInBackGround
,以便在用户按下后退按钮时捕获正在设置的标志

protected Long doInBackground(URL... urls) {
         int count = urls.length;
         long totalSize = 0;
         for (int i = 0; i < count; i++) {
             totalSize += Downloader.downloadFile(urls[i]);
             publishProgress((int) ((i / (float) count) * 100));
             // Escape early if cancel() is called
             if (isCancelled()) break;
         }
         return totalSize;
     }
当我试图将
isCancelled
转换为异步任务时,问题就出现了。我在
Downloader
下得到一个错误,上面写着“
Downloader
无法解决”我在
publishProgress
下也得到一个错误,上面写着“类型AsyncTask中的方法
publishProgress
(字符串…)不适用于参数(int)”我的任务是有人可以帮我把
isCancelled
放到我的任务中。我也做了研究,发现在代码中使用
isCancelled
的方法不止一种。我已经意识到,处理
已取消
对于新手来说确实是一件麻烦事。

1)要解决错误,请将Downloader设置为该类的公共静态数据变量。
2) 请确保

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long>
私有类下载文件任务扩展异步任务
是类声明吗

调用cancel()后,isCancelled()将返回true,而在执行doInBackground后,返回onCancelled,而不是onPostExecute。该参数将在后台线程上发出中断,因此您的长时间操作将关闭。不过,我想你可能在什么地方发现了这个问题。

希望这有帮助。。 如果无法解决错误,请发布日志猫详细信息

从SDK:

取消任务

可以通过调用cancel(布尔值)随时取消任务。 调用此方法将导致对isCancelled()的后续调用 返回true。调用此方法后,改为OnCancell(对象) onPostExecute(对象)的 doInBackground(对象[])返回。确保任务已取消 您应该尽可能快地检查 如果可能,从doInBackground(对象[])定期执行isCancelled() (例如,在循环内部。)

另外,请在函数块的开头使用super.onpause()等

请参阅:-

1)要解决错误,请将Downloader设置为该类的公共静态数据变量。
2) 请确保

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long>
私有类下载文件任务扩展异步任务
是类声明吗

调用cancel()后,isCancelled()将返回true,而在执行doInBackground后,返回onCancelled,而不是onPostExecute。该参数将在后台线程上发出中断,因此您的长时间操作将关闭。不过,我想你可能在什么地方发现了这个问题。

希望这有帮助。。 如果无法解决错误,请发布日志猫详细信息

从SDK:

取消任务

可以通过调用cancel(布尔值)随时取消任务。 调用此方法将导致对isCancelled()的后续调用 返回true。调用此方法后,改为OnCancell(对象) onPostExecute(对象)的 doInBackground(对象[])返回。确保任务已取消 您应该尽可能快地检查 如果可能,从doInBackground(对象[])定期执行isCancelled() (例如,在循环内部。)

另外,请在函数块的开头使用super.onpause()等


请参阅:-

在这种情况下,您需要为Asynctask类编写一个单独的文件。还要进行接口回调

您不需要跳过onBackPress按钮,只需将progressDialog设置为cancelable(True)并设置onCancelListner()。在这里,您可以设置一个标志isCanceld=true

整个场景在这个链接中定义

查看德米特里·扎伊采夫的答案,试试这个,如果卡在任何地方,请告诉我


希望这对您有所帮助。在这种情况下,您需要为Asynctask类编写一个单独的文件。还要进行接口回调

您不需要跳过onBackPress按钮,只需将progressDialog设置为cancelable(True)并设置onCancelListner()。在这里,您可以设置一个标志isCanceld=true

整个场景在这个链接中定义

查看德米特里·扎伊采夫的答案,试试这个,如果卡在任何地方,请告诉我


希望这有帮助

这是
中止
一个合理的方法,因为我的一些朋友向我建议了这个方法,而且在我调用它之后,我需要用
异常捕获它
查看我的更新答案..'pDialog.setOnCancelListener(新建DialogInterface.OnCancelListener(){public void onCancel(DialogInterface dialog){myTask.cancel(true);//finish();}});'好的,所以我把pDialog.setOnCancelListener(new DialogInterface.OnCancelListener(){public void onCancel(DialogInterface dialog){myTask.cancel(true);//finish();}})在我的
doInBackGround
方法下,你可以在onPreExecute函数上定义一个对话,并使用上面的代码..当对话被取消时,任务也会被取消,我还需要一个
异常
以便在异步任务被取消时使用,对吗?因为我的一些朋友建议,在这里使用
中止
是合理的方法吗这对我来说很重要,而且在我调用它之后,我需要用一个
异常捕获它
查看我的更新答案..”pDialog.setOnCancelListener(新建DialogInterface.OnCancelListener(){public void onCancel(DialogInterface dialog){myTask.cancel(true);//finish();}});'好的,所以我把pDialog.setOnCancelListener(new DialogInterface.OnCancelListener(){public void onCancel(DialogInterface dialog){myTask.cancel(true);//finish();}})在my
doInBackGround
Methody下定义onPreExecute函数上的对话,并使用上述代码..当对话被取消时