Android:异步任务并行执行问题

时间:2017-07-19 17:46:36

标签: android

有一个异步任务,它可以为函数中的不同情况进行模拟调用 目前正在进行什么样的操作:在调用任务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();

1 个答案:

答案 0 :(得分:1)

我猜你的问题是不正确的,因为来自AsyncTask API文档:

线程规则说,

任务只能执行一次(如果尝试第二次执行,则会抛出异常。)