我有一个备份例程,可以将所有内容从一个文件夹复制到外部SD卡,完美无缺。我正在尝试获得一个很好的弹出对话框,显示它正在运行但它没有显示。甚至没有尝试运行(但备份确实完成)。
这是我目前的代码:
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();
}
答案 0 :(得分:35)
您在Thread
或AsyncTask
中运行长时间运行的任务。然后,您的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();
}
答案 1 :(得分:1)
创建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的样本数量。
答案 2 :(得分:0)
而不是一次在一个函数中执行此操作。执行以下步骤,它肯定会为您工作。 1.创建一个异步类。(它将为您的复制目录功能创建一个单独的线程,并且不会在主UI上运行。) 2.在执行异步类之前显示进度对话框。 3.在后执行方法中,关闭对话框。