2012-03-17 95 views
0

使用下面的代碼,當用戶點擊在移動裝置的背面鍵,其取消的AsyncTask。手柄progressdialog中的AsyncTask

protected class UploadFiles extends AsyncTask<String, String, String> implements OnDismissListener { 

private ProgressDialog mDialog; 

protected void onPreExecute() { 

super.onPreExecute(); 
mDialog = new ProgressDialog(UploadFiles.this); 
mDialog.setMessage(progressMsg); 
mDialog.setCancelable(true); 
mDialog.setOnDismissListener(this); 
mDialog.show(); 

} 

protected String doInBackground(String... params) { 

........ 
........ 

} 

public void onDismiss(DialogInterface dialog) { 

this.cancel(true); 
} 

protected void onCancelled() { 

cancel(true); 

} 

上述實現在用戶單擊移動設備的BACK按鈕時取消AsyncTask。

由於該任務是一項長期耗時的操作,我想提供用戶是否要取消操作與否,當用戶點擊移動設備的BACK按鈕,用戶警報(警告)。

我沒有收到BACK按鈕回調onBackPressed()顯示進度對話框時&用戶單擊後退按鈕。

這是我面臨的三星平板P6200 &不是在Android模擬器的另一個問題:

當顯示progressdialog &用戶觸摸progressdialog區域外的屏幕上,progressdialog駁回。

如何停止解除進度對話框?

任何建議/執行相同的提示會有所幫助。

}

回答

0

如果使用setCancelable(false)然後在對話外攻不會取消它。

而且你應該叫ProgressDialog#show()AsyncTask,因爲ProgressDialog使用了動畫,其中包含了線程的EventHandler它在運行。所以在這種情況下,你需要3個線程總數。

(這是真的Android的一個設計缺陷)

+0

感謝您的評論。我從AsyncTask的onPreExecute()調用mDialog.show()。如何在用戶點擊BACK按鈕時顯示警報? – chiranjib 2012-03-17 14:41:33

+0

使用'setOnCalcelListener()' – 2012-03-17 14:47:28

1

對於駁回progressdialog首先拆下

mDialog.setCancelable(真);

從您的代碼,然後試試這個代碼按您的要求。

private class DownloadQuestion extends AsyncTask<String, Void, String> 
    {   

     @Override 
     protected void onPreExecute() 
     { 

      pd = ProgressDialog.show(Activity_SplashScreen.this, "","Please wait. Loading latest questions...", true,false);      

      super.onPreExecute(); 
     } 

     @Override 
     protected String doInBackground(String... urls) 
     { 
      //Write background code here Code 
      return ""; 
     } 

     @Override 
     protected void onPostExecute(String response1) 
     { 
      Intent intent = new Intent(Activity_SplashScreen.this, Activity_Main.class); 
      startActivity(intent); 
      finish(); 

      if (pd != null && pd.isShowing()) 
       pd.dismiss(); 

     } 
    } 
1

您可以使用setCancelable(false)來停止後退按鈕或輕敲對話框關閉。

如果您想顯示警告,則需要實施setOnCancelListener()setOnDismissListener(),以便在用戶解散時得到通知。一定要取消的AsyncTask如果用戶不取消爲好,否則即使你的對話框駁回的AsyncTask仍在運行