Android Studio没有同时运行AsyncTasks。为什么?

时间:2015-08-10 01:21:00

标签: android-asynctask

假设我有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? (我认为是,因为我知道它们就像线程一样)

如果是的话,我做错了什么?

谢谢你们。

2 个答案:

答案 0 :(得分:1)

Android two AsyncTasks serially or parallel execution? - The second is freezing but the result is ok

您可以通过将execute()替换为executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)来选择并行执行。

https://www.youtube.com/watch?v=HNcE6MLnuIw

答案 1 :(得分:0)

实际上,不,那不是AsyncTasks的工作方式。假设您在经过Honeycomb的设备上对此进行了测试,那么您的asynctasks将像您的示例一样排队。

AsyncTask

阅读标题为&#34;执行顺序&#34的部分;

  

首次引入时,AsyncTasks在单个后台线程上串行执行。从DONUT开始,这被更改为一个线程池,允许多个任务并行运行。从HONEYCOMB开始,任务在单个线程上执行,以避免由并行执行引起的常见应用程序错误。

     

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