1

假设我必须将一堆文件从一个位置复制到另一个位置。我将在 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
}

因为make 在主线程publishProgressonProgressUpdate运行,所以一切都应该是花花公子。

于 2012-10-01T19:58:18.383 回答