我尝试了AsyncTask
,线程和处理程序,但我没有得到它。
方法readXML()
大约需要1-2分钟,我只需要一个方法来取消这个操作。我找到的所有解决方案都是针对短时间操作(设置标志,检查标志和中断)。
编辑
protected class InitTask extends AsyncTask<Context, Integer, String> {
@Override
protected String doInBackground( Context... params ){
try{
preparing = true;
readXML();
preparing = false;
} catch( Exception e ){
Log.i("test", e.getMessage() );
}
return "COMPLETE!";
}
@Override
protected void onCancelled(){
super.onCancelled();
}
}
// ....
_initTask = new InitTask();
_initTask.execute(this);
// ....
_initTask.cancel(true);
您的问题是onCancelled仅在 doInBackground返回后调用。因此需要在readXML操作中检查isCancelled。
可以通过调用cancel(boolean)随时取消任务。调用此方法将导致对isCancelled()的后续调用返回true。调用这个之后方法,而不是onCancelled(Object)的onPostExecute(Object)将被执行doInBackground(Object[])的回报。以确保一个任务是尽快取消,你应该总是检查返回值吗isCancelled()周期性地从doInBackground(Object[]),如果可能的话(例如在循环中)