如何分别运行两个独立的异步任务?

时间:2013-12-04 06:28:45

标签: android

在我的应用程序中,我有两个按钮单击,在两个按钮单击中有两个不同的异步任务正在运行,我的问题是当我单击按钮1并且第一个异步任务正在运行意味着它运行时我点击了第二个按钮和第二个异步任务也已启动,但在后台工作,直到第一个异步任务完成,第二个异步任务没有启动?

public void onItemClick(AdapterView<?> arg0, View arg1, int position,long arg3) {
if(position==1)
           {

              Asynchronoustask1();

           }

            if(position==2)
            {

              Asynchronoustask2();
            }
}

3 个答案:

答案 0 :(得分:5)

如果AsyncTask的实施方式正确,则此行为的可能原因是因为executor的默认AsyncTasksSERIAL_EXECUTOR

并行运行多个AsyncTask个实例(不是连续的...没有一个接一个)。按如下方式执行:

if (Build.VERSION.SDK_INT >= 11) {
    outstandingTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} else {
    outstandingTask.execute();
}

来自documentation

  

首次引入时,AsyncTask在一个单独执行   背景线程。从DONUT开始,这被更改为一个池   允许多个任务并行运行的线程。从...开始   HONEYCOMB,任务在单个线程上执行以避免常见   并行执行导致的应用程序错误。

     

如果您真的想要并行执行,可以调用   executeOnExecutor(java.util.concurrent. Executor, Object[])   THREAD_POOL_EXECUTOR

答案 1 :(得分:0)

有多个要运行的选项asyncrhonously您可以使用两个AsyncTask,其中包含一个名为doInBackground()的方法供您使用。或者简单一点,您可以使用两个threads

例如:Thread

Thread thread = new Thread()
{
@Override
public void run() {
    try {
        while(true) {
           // your code
        }
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}
};

thread.start();

如果您想要delay使用Handler

您需要执行UI

所使用的任何RunOnUIThread()操作

答案 2 :(得分:0)

异步任务总是在后台运行。它不会打扰任何进程。可能是你的第一个持有一些资源的异步任务,也是第二个使用它。所以它等待资源。

请仔细查看@您的代码或粘贴您的代码..