2016-10-26 5 views
-1

AsyncTask 클래스 내에서 세 가지 태스크를 실행하고 있습니다. 세 개의 AsyncTask 클래스를 사용하지 않고 이러한 작업을 병렬로 실행하려고합니다. 이것이 가능한가? 그렇다면 어떻게 할 수 있습니까? 아래에서 AsyncTask 클래스의 코드 스 니펫과 doInBackground 메서드를 찾을 수 있습니다.AsyncTask 내에서 작업을 병렬로 실행하려면 어떻게해야합니까?

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; 
    } 
} 
+0

'AsyncTask'를 사용하지 않으려면'AsyncTask'를 제거하고 세 개의'Threads'를 사용하십시오. – CommonsWare

+0

'ExecutorService'를 사용하여 작업 (Runnable's)을 실행하십시오. 최선의 선택입니다. – Beloo

답변

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(); 
+0

이러한 asynctasks는 순차적으로 실행됩니다. – njzk2

+0

@ njzk2, 예. 당신은 맞습니다 – Vyacheslav

+0

@ njzk2, 나는 그 단점이 많이 있기 때문에 드문 asynctask 클래스를 사용합니다. – Vyacheslav

3

API가 말한다 :

처음 소개되었을 때, AsyncTasks는 단일 백그라운드 스레드에서 연속적으로 실행되었습니다. DONUT으로 시작하여 여러 스레드가 병렬로 작동 할 수 있도록 스레드 풀로 변경되었습니다. HONEYCOMB부터는 병렬 실행으로 인한 공통 응용 프로그램 오류를 피하기 위해 단일 스레드에서 작업이 실행됩니다.

그래서, 병렬 실행을 위해 :

@TargetApi(Build.VERSION_CODES.HONEYCOMB) // API 11 
void startMyTask(AsyncTask asyncTask) { 
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) 
     asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params); 
    else 
     asyncTask.execute(params); 
} 

는 희망이 도움이!

+0

http://stackoverflow.com/a/13800208/1979882 – Vyacheslav

관련 문제