在我的应用程序中,我有两个按钮单击,在两个按钮单击中有两个不同的异步任务正在运行,我的问题是当我单击按钮1并且第一个异步任务正在运行意味着它运行时我点击了第二个按钮和第二个异步任务也已启动,但在后台工作,直到第一个异步任务完成,第二个异步任务没有启动?
public void onItemClick(AdapterView<?> arg0, View arg1, int position,long arg3) {
if(position==1)
{
Asynchronoustask1();
}
if(position==2)
{
Asynchronoustask2();
}
}
答案 0 :(得分:5)
如果AsyncTask
的实施方式正确,则此行为的可能原因是因为executor
的默认AsyncTasks
为SERIAL_EXECUTOR
。
并行运行多个AsyncTask
个实例(不是连续的...没有一个接一个)。按如下方式执行:
if (Build.VERSION.SDK_INT >= 11) {
outstandingTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} else {
outstandingTask.execute();
}
首次引入时,
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)
异步任务总是在后台运行。它不会打扰任何进程。可能是你的第一个持有一些资源的异步任务,也是第二个使用它。所以它等待资源。
请仔细查看@您的代码或粘贴您的代码..