1

AsyncTasksプログレスダイアログを使用するAndroidアプリケーションがあります。
私の問題は、キャンセルできたもののAsynchTasks

Activity ... has leaked window 

それは、asynchTask をキャンセルできたにもかかわらず、進行状況ダイアログをキャンセルしていないためです。
asynctasks 進行状況ダイアログを確実にキャンセルするにはどうすればよいですか?

@SuppressWarnings("rawtypes")
public OnCancelListener buildOnCancelListener(final AsyncTask asyncTask) {
return new DialogInterface.OnCancelListener() {
@Override
public void onCancel(final DialogInterface dialogInterface) {
    asyncTask.cancel(true);
    }
};
}
4

2 に答える 2

3

メソッドと にyourDialog.dismiss();入れます。AsyncTask.cancel(...) を使用している場合、onCancelled() は onPostExecute() ではなく doInBackground() の後に呼び出されます。onCancelledonPostExecute

これはここに文書化されています。

于 2013-07-15T19:07:55.003 に答える
0

Activityこれは、最初にダイアログを閉じずに新しいものに移動しようとしているためです。

これを試すことができます:

  • publishProgress()onProgressUpdate()inを使用してAsyncTaskを更新しProgressDialogます。
  • onProgressUpdate()ダイアログを更新する前に、ダイアログが表示/有効であることをテストします。onProgressUpdateアクティビティの同じ UI スレッドで実行されるため、同期の問題は発生しません。
  • dialog.dismiss()との両方をonCanceled()呼び出しますonPostExecute()
  • ダイアログが既に表示dialog.dismiss()されている場合は、必ず呼び出してください。Activity.onStop()

電話dialog.dismiss()をかけonCancel()ても、問題が解決されるとは限りません。

于 2013-07-17T02:29:27.317 に答える