gpt4 book ai didi

android - 如何在 Android 中正确终止 AsyncTack 线程?

转载 作者:太空狗 更新时间:2023-10-29 13:31:54 24 4
gpt4 key购买 nike

我在我的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com