让我们说我必须将一堆文件从一个位置复制到另一个位置。我将在AsyncTask中执行此操作,以便在操作发生时轻松显示progressBar。
但是,假设正在复制的文件已经存在于新位置,那么可以暂停asynctask并显示一个提示跳过或覆盖的警告对话框吗?
据我所知,它在asynctask中不可能。但有没有一种聪明的方法来实现类似的东西?或者我应该查看列表,可能是1000多个文件,然后检查它们是否存在于新位置?
最有效的方法是什么?
答案 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
在主线程中运行,所以都应该是花花公子。