- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在我的 Android 项目中继承了一个 AsyncTask。
我想实现一项功能,允许用户取消当前的 AsyncTack 并在当前任务花费太多时间的情况下启动一个新的 AsyncTack。
MyAsyncTask mat = new MyAsyncTask();
当用户点击取消按钮时,我会执行下面的代码,然后开始一个新的任务。
mat.cancel(true);
但是,后来我意识到,新任务只有在旧任务完成后才会开始。旧的任务进程仍在执行。
我在google上查了下官方文档。看来我应该在doInBackGroud(Params... params)中调用下面的语句。
if (isCancelled()) break;
问题是我发现下面的代码需要很长时间。
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
HttpResponse httpResponse = httpClient.execute(httpPost);
但是,当httpClient.execute(httpPost) 正在执行时,如何检查任务是否被取消?有没有像 onProgressChanged(int progress) 这样的方法我可以在 DefaultHttpClient 中覆盖?
最佳答案
I want to implement a feature that allow user to cancel the current AsyncTack and start a new one if the current task take too much time.
由于在旧任务完成之前无法开始新任务,因此可以创建 Asyntask 的新实例。事实上,多次使用 AsyncTask 实例并不是一个好主意。在你之后
HttpResponse httpResponse = httpClient.execute(httpPost);
可以查看是否取消
if(!isCanceled()){
}
查看 docs ,线程规则下的最后一行。
更新正如评论指出的那样。取决于你的平台,所以在执行之前检查平台版本。
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB) {
myTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
else {
myTask.execute();
}
关于android - 如何在 Android 中正确终止 AsyncTack 线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14755993/
我是一名优秀的程序员,十分优秀!