暂停一个可运行的线程并等待用户输入

时间:2012-10-01 19:49:33

标签: java android

让我们说我必须将一堆文件从一个位置复制到另一个位置。我将在AsyncTask中执行此操作,以便在操作发生时轻松显示progressBar。

但是,假设正在复制的文件已经存在于新位置,那么可以暂停asynctask并显示一个提示跳过或覆盖的警告对话框吗?

据我所知,它在asynctask中不可能。但有没有一种聪明的方法来实现类似的东西?或者我应该查看列表,可能是1000多个文件,然后检查它们是否存在于新位置?

最有效的方法是什么?

1 个答案:

答案 0 :(得分: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
}

因为publishProgress使onProgressUpdate在主线程中运行,所以都应该是花花公子。