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 закройте диалоговое окно.

Другие вопросы по тегам