Android取消长操作(Asynctask,thread ...?)

时间:2011-07-10 14:06:04

标签: android long-integer operation

我尝试了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);

1 个答案:

答案 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 []),如果可能的话   (例如在循环内部。)