如何在AsyncTask中并行运行任务?

时间:2016-10-26 18:01:55

标签: android android-asynctask

我在AsyncTask类中运行了三个任务。我想并行运行这些任务,而不使用三个AsyncTask类。这可能吗?如果是的话,怎么办呢?您可以在下面找到我的AsyncTask类及其doInBackground方法的代码片段。

private class AsyncBenchmarking extends AsyncTask<Void, Void, Integer> {
    @Override
    protected void onPreExecute() {
        lockScreenOrientation();
        animateScreen();

        super.onPreExecute();
    }

    @Override
    protected Integer doInBackground(Void... params) {

        firstTaskPerformance = objPrimeNumber.generatePrimeNumbers();
        secondTaskPerformance = objLinpack.linpackBenchmark();
        thirdTaskPerformance = objSuperPi.calculatePi(100000);

        return;
    }
}

3 个答案:

答案 0 :(得分:3)

api说:

  

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

因此,对于并行执行:

[{"code":"123"},{"identification":"Some item"},{"price":"$20"}]

希望它有所帮助!

答案 1 :(得分:2)

您可以改为使用Thread

new Thread((new Runnable() {

        @Override
        public void run() {
            //somecode 1
        }
    }).start();
new Thread(((new Runnable() {

        @Override
        public void run() {
            //somecode 2
        }
    }).start();
new Thread(((new Runnable() {

        @Override
        public void run() {
            //somecode 3
        }
    }).start();

答案 2 :(得分:0)

不应直接操作线程。您应该使用ExecutorService类,如下所述:https://developer.android.com/reference/java/util/concurrent/ExecutorService.html

如果要并行执行三个任务,请将poolSize设置为3

没有更多,没有更少