1

ある場所から別の場所に大量のファイルをコピーする必要があるとしましょう。これは AsyncTask で行うので、操作の実行中にプログレス バーを簡単に表示できます。

しかし、コピーされているファイルの 1 つが新しい場所に既に存在しているとしましょう。その後、asynctask を一時停止して、スキップまたは上書きを示す警告ダイアログを表示できますか?

私が理解したことから、asynctask内では不可能です。しかし、同様のことを達成するスマートな方法はありますか? または、1000 以上のファイルになる可能性があるリストを調べて、それらが新しい場所に存在するかどうかを確認する必要がありますか?

最も効率的な方法は何ですか?

4

1 に答える 1

1

基本的に、次のようなことができます。

public ? doInBackground(?... ?s) {
    while (shouldCopy) {
        while (needUserVerfication)
            if (!verifying) 
                publishProgress(NEED_USER_VERIFICATION);
        else
            // ...
    }
}

public void onProgressUpdate(Integer... ints) {
    switch (ints[0]) {
    case NEED_USER_VERIFICATION:
        AlertDialog.Builder adb = new AlertDialog.Builder(mContext);
        adb.setTitle("Lisen!");
        adb.setMessage("I need your input");
        adb.setPostiveClickListener("Accept", this)
        adb.setNegativeClickListener("Cancel", this)
        adb.show();
    case PUBLISH_PROGRESS:
        // Update progress
    }
}

public void onClick(DialogInterface dialog, int which) {
    if (DialogInterface.POSITIVE == which) {
        needUserVerification = true
    } else {
        needUserVerification = false
    }
    verifying = false
}

publishProgressmakeはメイン スレッドで実行されるためonProgressUpdate、すべてがダンディである必要があります。

于 2012-10-01T19:58:18.383 に答える