2013-07-15 91 views
1

我有一個android應用程序,它使用AsyncTasks進度對話框。
我的問題是,雖然我已成功地取消AsynchTasks我得到
取消Android asyncTask進度對話框

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); 
    } 
}; 
} 

回答

3

onCancelled方法和onPostExecuteyourDialog.dismiss();。如果您正在使用AsyncTask.cancel(...),則onCancelled()將在doInBackground()NOT onPostExecute()後被調用。

這記錄在here

0

這是因爲您正嘗試移動到新的Activity而不首先關閉對話框。

你可以試試這個:

  • 使用publishProgress()onProgressUpdate()AsyncTask更新ProgressDialog
  • in onProgressUpdate()在嘗試更新對話框之前測試對話框是否可見/活動。這不會帶來任何同步問題,因爲onProgressUpdate在活動的相同UI線程中運行。
  • 致電dialog.dismiss()都在onCanceled()onPostExecute()上。
  • 如果您的對話框已經可見,請務必在Activity.onStop()處撥打dialog.dismiss()

撥打onCancel()dialog.dismiss()將不能保證,因爲

+0

我onPostExecute()調用已經是dialog.dismiss的問題就解決了。但是,如果使用cancel(true)取消asyncTask,則不會調用onPostExecute()。 – Hector