我尝试了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);
答案 0 :(得分:1)
你的问题是onCancelled仅在 doInBackground返回后调用。因此,您需要在readXML操作中检查isCancelled。请参阅下面的文档摘录(来自http://developer.android.com/reference/android/os/AsyncTask.html)...
可以通过调用cancel(boolean)随时取消任务。调用此方法将导致 后续调用isCancelled() 返回true。调用此之后 方法,onCancelled(Object),而不是 ofPostExecute(Object)将是 在doInBackground(Object [])之后调用 回报。确保完成任务 你尽快取消了 应该经常检查返回值 ofCancelled()定期来自 doInBackground(Object []),如果可能的话 (例如在循环内部。)