2016-08-27 2 views
-4

다른 비동기 작업 후에 하나의 비동기 작업을 실행하려고합니다. 여기서, 비동기 태스크 2가 실행되거나 비동기 태스크의 값에 의존하는 경우. (X의 == 2) A1 전에 실행 될 경우 조건이 완료되기 때문에 여기에 내가 내 이해에 따르면하나의 비동기 작업을 하나씩 실행하는 방법?

int x=0; 
x=new A1().executeOnExecutor(AsyncTask.SERIAL_EXECUTOR); 
(Here x is just for the sake of explanation and making it simple, take it as a pseudo code rather than actual code) 
if (x==2) 
new A2().executeOnExecutor(AsyncTask.SERIAL_EXECUTOR); 

을 달성하고자하는 것입니다, 여기에서 x의 값은 0 이외의 다른 수 없을 것입니다. A1 작업이 완료되면 if (x == 2) 조건이 실행되기를 원합니다.

이제 A1의 onPostExecute 내부에서 A2를 실행하면 트릭이 수행되지만 상황에 따라 A2를 독립적으로 실행해야한다는 것을 알고 있습니다.

+1

그래서 단지를 입력 후 실행 당신이 그것을 원하는 경우에 A2로? – chrylis

+0

@chrylis 그것은 단지 하나의 예였습니다. # 서로 연결된 3-4 개의 비동기 작업이 있습니다. # 입력 값이 변경 될 수 있습니다. 이러한 비동기 작업의 입력은 서로 다를 수도 있고 그렇지 않을 수도 있습니다. 실용적이지 않습니다. 나는 그것을 현재 사용하고있다. 그리고 그것을 계속 사용하기 위해서는 아주 사소한 변화로 붙여 넣기해야합니다. Post Execute에 넣지 않고 어떻게 할 수 있는지 알고 있습니까? –

+0

정말로 4 개의 AsyncTasks를 실행해야합니까, 아니면 순차적으로 4 개의 작업을 수행해야합니까? 여기에'onPostExecute'에있는 것들을 함께 묶는 것보다 훨씬 더 깨끗한 접근법이 있습니다. –

답변

0

첫 번째 AsyncTask의 onPostExecute() 메서드 내에서 두 번째 asyncTask를 실행해야합니다.

+0

자세한 내용을 읽어보십시오 –

+0

위에서 지적한 것처럼 질문의 세부 사항은 완전히 잘못되었습니다! –

+0

무엇이 잘못 되었습니까? –

0

AsyncTask으로 작업 할 수 있습니다. 우리의 매개 변수로 Runnable 사용 :

private class WorkerTask extends AsyncTask<Runnable, Void, Void> { 

     @Override 
     protected Void doInBackground(Runnable... runnables) { 
      for (Runnable task : runnables) { 
       task.run(); 
       publishProgress(); 
      } 
      return null; 
     } 

     @Override 
     protected void onProgressUpdate(Void... values) { 
      //update ui 
      super.onProgressUpdate(values); 
     } 

     @Override 
     protected void onPostExecute(Void aVoid) { 
      //done 
      super.onPostExecute(aVoid); 
     } 
} 

을 그리고 당신이 사용하는 것이이 이렇게 같은 :

Runnable taskOne = new Runnable() { 
    @Override 
    public void run() { 
     doSomeWork(); 
    } 
}; 

Runnable taskTwo = new Runnable() { 
    @Override 
    public void run() { 
     doSomeMoreWork(); 
    } 
}; 

new WorkerTask().execute(taskOne, taskTwo); 
+0

실행 파일이 필요합니까? 간단한 인터페이스/수신기는하지 않습니까? –

+0

필요는 없지만, 'WorkerTask'는 작업의 세부 사항을 알 필요가 없도록 분리됩니다. 리스너 패턴을 사용할 수도 있습니다. 단지 onProgressUpdate 또는 onPostExecute에서 UI 코드를 호출하고 있는지 확인하십시오. –

관련 문제