0

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

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

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.

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

4

1 回答 1

0

一个 asynctask 在一个线程中运行,就像一切一样。您可以使用等待和通知,以及处理程序或 onProgressUpdate 来通知进度条和所有内容。

于 2012-08-23T14:11:19.050 回答