ProgressDialog在执行任务时未显示

我有一个备份例程,可以将从一个文件夹到外部SD卡的所有内容复制完美。 我正在尝试一个很好的popup对话框,显示它正在运行但它没有显示。 甚至没有尝试运行(但备份确实完成)。

这是我目前的代码:

public void doBackup(View view) throws IOException{ ProgressDialog pd = new ProgressDialog(this); pd.setProgressStyle(ProgressDialog.STYLE_SPINNER); pd.setMessage("Running backup. Do not unplug drive"); pd.setIndeterminate(true); pd.setCancelable(false); pd.show(); File source = new File("/mnt/extSdCard/DirectEnquiries"); File dest = new File("/mnt/UsbDriveA/Backup"); copyDirectory(source, dest); pd.dismiss(); } 

您在ThreadAsyncTask运行长时间运行的任务。 然后你的ProgressDialog会出现。

做类似的事情:

 public void doBackup(View view) throws IOException{ final ProgressDialog pd = new ProgressDialog(this); pd.setProgressStyle(ProgressDialog.STYLE_SPINNER); pd.setMessage("Running backup. Do not unplug drive"); pd.setIndeterminate(true); pd.setCancelable(false); pd.show(); Thread mThread = new Thread() { @Override public void run() { File source = new File("/mnt/extSdCard/DirectEnquiries"); File dest = new File("/mnt/UsbDriveA/Backup"); copyDirectory(source, dest); pd.dismiss(); } }; mThread.start(); } 

创建一个asyntask并完成耗时的任务

  public void doBackup(View view) throws IOException{ ProgressDialog pd = new ProgressDialog(this); pd.setProgressStyle(ProgressDialog.STYLE_SPINNER); pd.setMessage("Running backup. Do not unplug drive"); pd.setIndeterminate(true); pd.setCancelable(false); pd.show(); //create asyntask here //Put below code in doInBackground mathod File source = new File("/mnt/extSdCard/DirectEnquiries"); File dest = new File("/mnt/UsbDriveA/Backup"); copyDirectory(source, dest); //put this code in onPostExecute Method. pd.dismiss(); } 

您将获得Asyntask的样本数量。

而不是一次在一个function中执行此操作。 执行以下步骤,它肯定会为您工作。 1.创建一个异步类。(它将为您的复制目录function创建一个单独的线程,并且不会在主UI上运行。)2。在执行异步类之前显示您的进度对话框。 3.在后执行方法上,关闭对话框。