我有一个应用程序,用户可以在其中将文件备份到服务器/从服务器恢复。
在恢复操作期间,在下载每个文件之前,我会检查文件是否已经存在(假设我知道原始路径)。
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) {}
}
如果我使用a,Thread
我可以使用wait() 和notify()。我将不得不使用 aHandler
来更新ProgressBar
.
那么哪个更好(AsyncTask
或Thread
)?还是有第三种更好的解决方案?