我有开/关按钮。单击 on 时,算法开始工作(大约工作 10 秒)。
该算法正在另一个线程中工作(不在主线程中)。我想使用关闭按钮停止算法,但它不处理点击事件......
但是有一些奇怪的东西。
当我在单击时使用这种代码块时,它是可以的。
while(true){
//do something
}
我的算法是这样的
myObj.startAlg();
我有开/关按钮。单击 on 时,算法开始工作(大约工作 10 秒)。
该算法正在另一个线程中工作(不在主线程中)。我想使用关闭按钮停止算法,但它不处理点击事件......
但是有一些奇怪的东西。
当我在单击时使用这种代码块时,它是可以的。
while(true){
//do something
}
我的算法是这样的
myObj.startAlg();
您可以执行以下操作:
当按下按钮时取消任务:
AsynTask.cancel(true);
在 AsyncClass 添加if(isCancelled())
部分,如下所示: 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;
/*Put this in the doInBackgound() for the purpose*/
}
return totalSize;
}
编辑:
并从 AsyncTask 的文档中添加更多信息:
可以通过调用 cancel(boolean) 随时取消任务。调用此方法将导致对 isCancelled() 的后续调用返回 true。调用此方法后,将在 doInBackground(Object[]) 返回后调用 onCancelled(Object),而不是 onPostExecute(Object)。为了确保尽快取消任务,如果可能(例如在循环内),您应该始终从 doInBackground(Object[]) 定期检查 isCancelled() 的返回值。