我有一个应用程序,用户可以在其中备份/恢复服务器的文件。
在恢复操作期间,在下载每个文件之前,我检查文件是否已经存在(假设我知道原始路径)。
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) {}
}
如果我使用Thread
我可以使用wait()和notify()。我必须使用Handler
来更新ProgressBar
。
哪个更好(AsyncTask
或Thread
)?还是有第三个更好的解决方案?
答案 0 :(得分:0)
asynctask在线程中运行,就像所有东西一样。您可以使用wait和notify,使用处理程序或onProgressUpdate来通知progressBar和所有内容。