有一个异步任务,它可以为函数中的不同情况进行模拟调用 目前正在进行什么样的操作:在调用任务2的onPostExecute时执行任务2的doinBackground后,它返回包含对应于Task1和Task2的输出的列表,如下所述 实际O / P. onPostExecute:/path/Test1.txt onPostExecute:/path/Test2.txt
预期的O / P. onPostExecute:/path/Test2.txt
我们如何能够独立地维护每个案例对应的Post in Post(目前这是静态列表)
异步任务类 - >
static ArrayList<String> listOfCopiedFiles = new ArrayList<>();
protected Boolean doInBackground(String... params) {
boolean sucssees_fail = true;
listOfCopiedFiles.clear();
sucssees_fail = copyDirectoryOneLocationToAnotherLocation(srccopy, dst);
//copyDirectoryOneLocationToAnotherLocation(srccopy, dst) : Returns Boolean and add the file in "listOfCopiedFiles" which is static array list
}
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
if(result)
{ Log.d(TAG,"delegate.onSuccess");
delegate.onSuccess(ServiceIntent, listOfCopiedFiles);
// on success passes the list of files
}
}
致电课程 - &gt;
case Type1:
srcCopydir = Dir1
copyfilename = file1;
copyFilesAsyncTask.execute(srcCopydir, copyfilename);
break;
case Type2:
srcCopydir = Dir2
copyfilename = file2;
copyFilesAsyncTask.execute(srcCopydir, copyfilename);
break;
case Type3:
srcCopydir = Dir3;
copyfilename = file3
copyFilesAsyncTask.execute(srcCopydir, copyfilename);
break;
case Type4:
srcCopydir = Dir3;
copyfilename = file3
copyFilesAsyncTask.execute(srcCopydir, copyfilename);
break;
这个calss通过读取包含上述所有类型的解析的xml
来接收意图每次收到意图时,都会创建新的异步任务对象。
问题: 虽然问题类型1的任务正在进行(doInBackground),但是接收到其他“案例”的意图因此也开始执行其他案例
在Case1的“onPostExecute”之前有时会发生什么事情被称为案例2完成,在case1中它给出了o / p,即case2期望的“listOfCopiedFiles”
一旦调用了delegate.onSuccess(ServiceIntent,listOfCopiedFiles),我就尝试清除“onPostExecute”中的“listOfCopiedFiles”,但它似乎没有工作
Boolean chk;
delegate.onSuccess(ServiceIntent, listOfCopiedFiles);
for(String list :listOfCopiedFiles){
chk = listOfCopiedFiles.remove(list);
}
还尝试在“onPostExecute”中复制temprorary数组列表中的listOfCopiedFiles,并在控件进入“onPostExecute”时立即清除它,但它也无法正常工作
Boolean chk;
chk= copyPathTempList.addAll(listOfCopiedFiles);
listOfCopiedFiles.clear();
delegate.onSuccess(ServiceIntent, copyPathTempList);
copyPathTempList.clear();
答案 0 :(得分:1)
我猜你的问题是不正确的,因为来自AsyncTask API文档:
线程规则说,
任务只能执行一次(如果尝试第二次执行,则会抛出异常。)