[英]How to stop asynctask thread in android?
我想停止AsyncTask
从另一个线程AsyncTask
线程。 我已经尝试过像new AsyncTask.cancel(true)
停止后台进程,但是没有停止。
有人可以帮我吗?
在活动中声明asyncTask:
private YourAsyncTask mTask;
实例化如下:
mTask = new YourAsyncTask().execute();
像这样杀死/取消它:
mTask.cancel(true);
事情不会为您停止的原因是因为进程(doInBackground())一直运行到完成为止。 因此,在执行操作之前,您应该检查线程是否被取消:
if(!isCancelled()){
// Do your stuff
}
因此,基本上,如果未取消线程,请执行此操作,否则跳过它:)在操作过程中进行某些时间的检查很有用,尤其是在花些时间之前。
另外,“清理”小瓶中的油可能会很有用。
onCancelled();
AsyncTask的文档:
http://developer.android.com/reference/android/os/AsyncTask.html
希望这可以帮助!
您可能还必须在Activity
生命周期的onPause
或onDestroy
中使用它:
//you may call the cancel() method but if it is not handled in doInBackground() method
if (loginTask != null && loginTask.getStatus() != AsyncTask.Status.FINISHED)
loginTask.cancel(true);
其中loginTask
是您的AsyncTask
对象
谢谢。
您不能只是立即杀死asynctask。 为了停止它,您应该首先取消它:
task.cancel(true);
然后在asynctask的doInBackground()方法中检查它是否已被取消:
isCancelled()
如果是,请停止手动执行。
我有一个类似的问题-从本质上讲,在用户销毁了片段之后,我在异步任务中得到了NPE。 在研究了堆栈溢出问题之后,我采用了以下解决方案:
volatile boolean running;
public void onActivityCreated (Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
running=true;
...
}
public void onDestroy() {
super.onDestroy();
running=false;
...
}
然后,我在异步代码中定期检查“是否正在运行”。 我对此进行了压力测试,现在无法“中断”我的活动。 与我在SO上看到的一些解决方案相比,这完美地工作并且具有简化的优点。
您可以一次检查onCancelled():
受保护的对象doInBackground(Object ... x){
while (/* condition */) {
if (isCancelled()) break;
}
return null;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.