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