2011-07-31 4 views
3

대기열 등에서 여러 개의 AsyncTask 실행을 쉽게 정렬 한 다음 직렬 방식으로 실행하는 방법을 아는 사람이 있습니까?여러 AsyncTask의 직렬 실행

호출 된 비동기 작업이 완료되기 전에 기다리는 것이 좋겠지 만 현재 수행중인 상태를 테스트하더라도 비동기 작업을 수행 할 수 없습니다.

어떻게 해결할 수 있습니까? 나는 honeycomb API에서 SERIAL_EXECUTOR과 함께 executeOnExecutor()이라는 메서드가 있다는 것을 보았습니다. 필자가 설명한 바를 구현 한 것 같습니다. 그러나, 나는 벌집을 개발하고 있지 않다.

감사합니다.

답변

3

IntentService를 사용해보십시오. 참조에서 :

IntentService는 요청시 비동기 요청 (인 텐트로 표시됨)을 처리하는 서비스의 기본 클래스입니다. 클라이언트는 startService (Intent) 호출을 통해 요청을 보냅니다. 서비스는 필요에 따라 시작되고, 작업자 스레드를 사용하여 차례로 각 인 텐트를 처리하고 작업이 종료되면 자체를 중지합니다.

// Now let the service module do the rest 

    Intent serviceIntent = new Intent(context, Service.class); 
    serviceIntent.putExtra(GC.EXTRA_SERVICE_DATA, serviceData); 
    ComponentName compName = context.startService(serviceIntent) 

그것은 같은 광고 일을 다음과 같이

는 내가 방송 수신기에서 서비스를 실행. 요청은 잘 serialize됩니다. 요청이 수신되면 서비스가 시작되었습니다. 마지막 요청이 처리 된 후 서비스가 중지되었습니다. 요청은 FIFO로 처리되었습니다.

원본 패키지 이름을 마우스 오른쪽 단추로 클릭하고 새로 만들기/클래스를 선택하여 intentservice를 만들었습니다. 저는 intentservice를 수퍼 클래스로 사용했습니다. 생성자에는 'name'이라는 인수가 있습니다. 나는 다음과 같이 변경했다 :

public XxxService() {super("XxxService");} 

서비스의 모든 코드는 onHandleIntent 함수로 전달되었다. 다른 @Override 함수를 사용할 필요가 없었습니다. 이것은 당신이 원하는 무엇

희망 ...

참고 : 변수 '문맥'onReceive에 전달 된 매개 변수입니다. 코드의 이름을 XxxxService에서 'Service'또는 'service'로 변경했습니다. 마지막으로 GC라고하는 모든 프로젝트에 클래스를 만듭니다. 전역 상수에 대한 컨테이너 클래스입니다. GC.EXTRA_SERVICE_DATA는 여분의 키를 정의하는 전역 문자열입니다.

+0

AsyncTask는 내 작업 (서버로 파일 업로드)에 완벽하게 보일 것입니다. 그것은 직렬화가 나를 괴롭히는 것입니다. 서비스를 사용해 볼 수도 있지만 AsyncTask는 유연성이 뛰어나고 반복적으로 Activity에서 호출되기 때문에 가장 좋은 방법이라고 생각합니다. – dulys

+0

intentservice의 목적 중 하나는 파일을 업로드/다운로드하는 것입니다. 반복적으로 호출 될 수 있습니다. 일련 번호가 지정된 것은 활동의 호출입니다. 기본적으로 이것은 방금 말한 모든 것을위한 것입니다. –

+0

그것은 매력처럼 작동합니다, 많이 고마워요! – dulys

0

나는 이런 식으로 할 것입니다. 배열이나 대기열 또는 카운터가 활동에서 AsyncTAsk (같은 클래스의 AsyncTask 또는 다른 클래스)를 실행하려는 경우, AsyncTask, onPostExecute(), 카운터 (또는 유사한 데이터 구조)를 호출하고 AsyncTask를 다시 호출하십시오.

+0

글쎄, 이미 onPostExecute()에서 변경된 플래그와 비슷한 것을 시도했지만, 문제는 큐의 마지막 태스크가 이전에 완료된 후 구체적으로 실행되도록하고, 카운터의 감소 또는 변경 깃발이 분명히 이것을 얻지 못하고있다. – dulys

관련 문제