0

ユーザーがサーバーとの間でファイルをバックアップ/復元できるアプリケーションがあります。

復元操作中、各ファイルをダウンロードする前に、ファイルがすでに存在するかどうかを確認します(元のパスがわかっていると仮定します)。

boolean fileExists(String path);

ファイルが存在する場合は、ユーザーに、現在のファイルをダウンロードして名前を変更するか、ダウンロードして置き換えるか、スキップするかを尋ねたいと思います。

AlertDialogこれは、たとえばカスタムの場合があります( AlertDialog.Builderxmlレイアウトを使用)。

したがって、コードは次のようになります。

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を使用する場合は、Threadwait()とnotify()を使用できます。Handlerを更新するには、を使用する必要がありProgressBarます。

では、どちらが良いですか(AsyncTaskまたはThread)?または3番目のより良い解決策はありますか?

4

1 に答える 1

0

非同期タスクは、すべてのようにスレッドで実行されます。ハンドラーまたはonProgressUpdateを使用して、待機と通知を使用して、progressBarとすべてに通知できます。

于 2012-08-23T14:11:19.050 に答える