假设我必须将一堆文件从一个位置复制到另一个位置。我将在 AsyncTask 中执行此操作,以便在操作发生时轻松显示进度条。
但是假设一个被复制的文件已经存在于新位置,然后可以暂停异步任务并显示一个警告对话框说跳过或覆盖?
据我了解,它在异步任务中是不可能的。但是有没有一种聪明的方法来实现类似的东西?或者我应该先检查一下可能有 1000 多个文件的列表,然后检查它们是否存在于新位置?
什么是最有效的方法?
基本上你可以做这样的事情:
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 在主线程publishProgress
中onProgressUpdate
运行,所以一切都应该是花花公子。