0

私のデータはインターネットからロードされるので、AsynTask()を使用します。execute()メソッドを使用して、最初にprogressDialogを開き、次にバックグラウンドでデータをロードします。動作しますが、データの読み込みに時間がかかりすぎるため、読み込みをキャンセルしたい場合があります。これが問題です。戻るボタンをクリックするとダイアログが閉じますが、バックグラウンドでの読み込みが完了すると、何でも実行を開始します。ロード後に行うことになっています。たとえば、新しいインテントを開始します。読み込みを正しくキャンセルする方法はありますか?

new GridViewAsyncTask().execute();
public class GridViewAsyncTask extends AsyncTask<Void, Void, Void> {
    private ProgressDialog myDialog;

    @Override
    protected void onPreExecute() {
        // show your dialog here
        myDialog = ProgressDialog.show(ScrollingTab.this, "Checking data",
                "Please wait...", true, true);

    }

    @Override
    protected Void doInBackground(Void... params) {
        // update your DB - it will run in a different thread
        loadingData();

        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        // hide your dialog here
        myDialog.dismiss();
}
4

2 に答える 2

2

mAsycntask.cancel();タスクを停止したいときに呼び出します。

それで

@Override
protected Void doInBackground(Void... params) {
    // update your DB - it will run in a different thread

    /* load data  */
    ....
    if (isCancelled()) 
       return;
    /* continue loading data. */

    return null;
}

ドキュメント: http ://developer.android.com/reference/android/os/AsyncTask.html#isCancelled ()

于 2012-07-22T11:36:09.390 に答える
1

AsyncTaskを次のように宣言しますasyncTask = new GridViewAsyncTask();

次に、前と同じように実行し(asyncTask.execute();)、キャンセルします。

asyncTask.cancel();

onCanceledメソッドをAsyncTaskクラスに追加し、オーバーライドします。おそらくログか何か他のものを見せるために!

@Override
protected Void onCancelled () {
    // Your Log here. Will be triggered when you hit cancell.
}
于 2012-07-22T11:51:50.767 に答える