web-dev-qa-db-ja.com

タスクの実行中にProgressDialogが表示されない

1つのフォルダから完全に機能する外部SDカードにすべてをコピーするバックアップルーチンがあります。実行中に表示されるNiceポップアップダイアログボックスを取得しようとしていますが、表示されません。実行も試みません(ただし、バックアップは完了します)。

現時点での私のコードは次のとおりです。

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();
}
11
TMB87

長時間実行されるタスクは、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();
}
37
maninder singh

非同期タスクを作成し、時間のかかるタスクを配置します

 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();
    }

Asynctaskのサンプル数を取得します。

2
andy

一度に1つの関数でこれを行う代わりに。次の手順を実行すると、間違いなく機能します。 1. 1つの非同期クラスを作成します(コピーディレクトリ機能用に1つの個別のスレッドが作成され、メインUIでは実行されません)。2。非同期クラスを実行する前に進行状況ダイアログを表示します。 3.実行後のメソッドで、ダイアログを閉じます。

0
omy