ユーザーがサーバーとの間でファイルをバックアップ/復元できるアプリケーションがあります。
復元操作中、各ファイルをダウンロードする前に、ファイルがすでに存在するかどうかを確認します(元のパスがわかっていると仮定します)。
boolean fileExists(String path);
ファイルが存在する場合は、ユーザーに、現在のファイルをダウンロードして名前を変更するか、ダウンロードして置き換えるか、スキップするかを尋ねたいと思います。
AlertDialog
これは、たとえばカスタムの場合があります( AlertDialog.Builder
xmlレイアウトを使用)。
したがって、コードは次のようになります。
static final int DECISION_NO_ANSWER = -1;
static final int DECISION_RENAME = 0;
static final int DECISION_REPLACE = 1;
static final int DECISION_SKIP = 2;
int userDecision;
for (RestoreFile file : ListOfFiles) {
userDecision = DECISION_NO_ANSWER;
if (fileExists(file.getOriginalPath())){
OptionsDialog.show();
// wait for answer
}
switch(userDecision){
// handle different cases and update ProgressBar
}
}
もちろん、このコードは別のスレッドで実行する必要があります。
これを使用する場合AsyncTask
、答えを待つ方法は次のとおりです。
while(userDecision == DECISION_NO_ANSWER){
try {
Thread.sleep(30);
} catch (InterruptedException e) {}
}
Iを使用する場合は、Thread
wait()とnotify()を使用できます。Handler
を更新するには、を使用する必要がありProgressBar
ます。
では、どちらが良いですか(AsyncTask
またはThread
)?または3番目のより良い解決策はありますか?