假设我有2个AsyncTasks A和B.
让A成为:
public class A extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params){
int a = 1;
while(a < 10){
System.out.println(a);
for(int i = 0; i < 400000; i++){
//empty loop, just to spend time
}
a = a+2;
}
}
}
让B成为:
public class B extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params){
int a = 2;
while(a < 10){
System.out.println(a);
for(int i = 0; i < 400000; i++){
//empty loop, just to spend time
}
a = a+2;
}
}
}
我在我的MainActivity上打电话给他们这两个:
...
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new A().execute();
new B().execute();
}
我期望结果是在赔率和平均值之间进行某种合并(不完美但不知何故合并),但是我得到A的整个结果并且在B的整个结果之后,像这样:
1
3
5
7
9
2
4
6
8
有谁能告诉我这是否正常?
是否可以同时运行多个AsyncTasks? (我认为是,因为我知道它们就像线程一样)
如果是的话,我做错了什么?
谢谢你们。
答案 0 :(得分:1)
Android two AsyncTasks serially or parallel execution? - The second is freezing but the result is ok
您可以通过将execute()替换为executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)来选择并行执行。
答案 1 :(得分:0)
实际上,不,那不是AsyncTasks的工作方式。假设您在经过Honeycomb的设备上对此进行了测试,那么您的asynctasks将像您的示例一样排队。
阅读标题为&#34;执行顺序&#34的部分;
首次引入时,AsyncTasks在单个后台线程上串行执行。从
DONUT
开始,这被更改为一个线程池,允许多个任务并行运行。从HONEYCOMB
开始,任务在单个线程上执行,以避免由并行执行引起的常见应用程序错误。如果您真的想要并行执行,可以使用
executeOnExecutor(java.util.concurrent.Executor, Object[])
调用THREAD_POOL_EXECUTOR
。