AsyncTask需要很长时间

时间:2013-06-26 08:17:47

标签: java android parallel-processing android-asynctask threadpool

我有两个asyncTasks彼此依赖。任务一必须等到任务二完成。因为有必要检查两者的结果,之后才能继续。我用executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);执行线程。我的相关信息是THREAD_POOL_EXECUTOR并行执行任务。 在任务一结束时,我会执行以下操作来检查另一个变量:

if(!isCancelled())
{
    while(mOther.status)
    {
        try {
            Thread.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    if(checkOtherNodeList(P)) // the results are that what it should be the tasks will be canceled 
    {
        mOther.cancel(true);
        nodesAddedToTrack.addAll(P);
        cancel(true);
        return null;
    }
    synchronized (mOther.status) {
        mOther.status = true;
    }
}

在第二篇文章中,我最后做了以下几点:

if(isCancelled())
{
nodesAddedToTrack.addAll(P);
    nodesAddedToTrack.add(T.get(nodenrfromP));
}
synchronized (status) 
{
status = false;
}
while(!status)
{
if(isCancelled())
    {
    nodesAddedToTrack.addAll(P);
    nodesAddedToTrack.add(T.get(nodenrfromP));
    return null;
}
}

方法checkOtherNodeList(P)也在处理同步,因为否则我会在包含结果的两个ArrayLists上遇到访问问题。 问题是这种并行化的持续时间比我在一项任务中运行程序的时间长3-5倍。这是正常的吗?同步是问题吗? 两个任务都在while循环中运行。在每次运行while循环时,任务1应该比较结果。如果它们是我想要的,那么两个任务都将被取消,否则两个任务都将在另一个时间运行,依此类推。

1 个答案:

答案 0 :(得分:0)

您可以使用2个布尔值编写某种状态对象,并将其传递给两个AsyncTasks。当AsyncTasks完成时,让每个更改1布尔值。在setter中,您可以发现另一个布尔值是否已经更改。在那种情况下,你可以继续。