0

、 Thread 、および Handlerを試し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);
4

1 に答える 1

1

あなたの問題は、onCancelled がdoInBackground が戻った後にのみ呼び出されることです。そのため、readXML 操作内から isCancelled を確認する必要があります。以下のドキュメントからの抜粋 ( http://developer.android.com/reference/android/os/AsyncTask.htmlから) を参照してください...

cancel(boolean) を呼び出すことで、いつでもタスクをキャンセルできます。このメソッドを呼び出すと、後続の isCancelled() の呼び出しで true が返されます。このメソッドを呼び出すと、onPostExecute(Object) の代わりに onCancelled(Object) が doInBackground(Object[]) が返された後に呼び出されます。タスクができるだけ早くキャンセルされるようにするには、可能であれば (たとえばループ内で) doInBackground(Object[]) から定期的に isCancelled() の戻り値をチェックする必要があります。

于 2011-07-10T14:30:31.357 に答える