在长时间运行中请求用户输入

时间:2012-08-23 13:59:00

标签: android multithreading android-asynctask

我有一个应用程序,用户可以在其中备份/恢复服务器的文件。

在恢复操作期间,在下载每个文件之前,我检查文件是否已经存在(假设我知道原始路径)。

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

哪个更好(AsyncTaskThread)?还是有第三个更好的解决方案?

1 个答案:

答案 0 :(得分:0)

asynctask在线程中运行,就像所有东西一样。您可以使用wait和notify,使用处理程序或onProgressUpdate来通知progressBar和所有内容。