2012-03-17 76 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仍在运行