我有一个问题,如果我调用两个AsyncTasks,那么最后一个doinbackground永远不会被调用。我真的需要从我的主活动线程中调用这两个操作。
请详细说明这个问题..
由于
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
.
.
.
.
.
.
new ClientListener(this).execute();
new DatabaseReader(this).execute();
}
答案 0 :(得分:2)
AsyncTask使用线程池模式来运行doInBackground()中的东西。问题最初(在早期的Android OS版本中)池大小只有1,这意味着没有对一堆AsyncTasks进行并行计算。但后来他们修复了这个问题,现在大小为5,所以最多可以同时运行5个AsyncTasks。不幸的是,我不记得他们究竟改变了什么版本。
根据Google文档
首次引入时,AsyncTasks在单个上串行执行 背景线程。从DONUT开始,这被改成了一个池 允许多个任务并行运行的线程。后 HONEYCOMB,计划将此更改回单个线程 避免并行执行导致的常见应用程序错误。如果你 真正想要并行执行,你可以使用 executeOnExecutor(Executor,Params ...)此方法的版本 THREAD_POOL_EXECUTOR;但是,请参阅那里的评论以获得警告 它的用途。