ProgressDialog не отображается при выполнении задачи
У меня есть процедура резервного копирования, которая копирует все из одной папки на внешнюю 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();
}
3 ответа
Вы запускаете долго выполняющиеся задачи в 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();
}
Создайте 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.
Вместо того, чтобы делать это в одной функции одновременно. Сделайте следующие шаги, и это определенно будет работать для вас. 1. Создайте один асинхронный класс.(Он создаст один отдельный поток для вашей функциональности каталога копирования и не будет работать в основном пользовательском интерфейсе.) 2. Покажите диалоговое окно прогресса перед выполнением асинхронного класса. 3. В методе post execute закройте диалоговое окно.