多个AsyncTask不会一起执行

时间:2012-06-23 11:44:32

标签: android multithreading

我有一个问题,如果我调用两个AsyncTasks,那么最后一个doinbackground永远不会被调用。我真的需要从我的主活动线程中调用这两个操作。

请详细说明这个问题..

由于

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    .
    .
    .
    .
    .
    .
    new ClientListener(this).execute();
    new DatabaseReader(this).execute();
}

1 个答案:

答案 0 :(得分:2)

AsyncTask使用线程池模式来运行doInBackground()中的东西。问题最初(在早期的Android OS版本中)池大小只有1,这意味着没有对一堆AsyncTasks进行并行计算。但后来他们修复了这个问题,现在大小为5,所以最多可以同时运行5个AsyncTasks。不幸的是,我不记得他们究竟改变了什么版本。

根据Google文档

  

首次引入时,AsyncTasks在单个上串行执行   背景线程。从DONUT开始,这被改成了一个池   允许多个任务并行运行的线程。后   HONEYCOMB,计划将此更改回单个线程   避免并行执行导致的常见应用程序错误。如果你   真正想要并行执行,你可以使用   executeOnExecutor(Executor,Params ...)此方法的版本   THREAD_POOL_EXECUTOR;但是,请参阅那里的评论以获得警告   它的用途。