2011-10-07 3 views
4

많은 API 호출이 필요한 Android 앱에서 작업하고 있습니다. 필자는 IntentService 기반의 대기열 시스템을 구현하는 시스템을 구축했습니다. 문제는 IntentService가 실행되는 동안 정확한 ProgressBar 업데이트를 표시하고 싶습니다.IntentService 진행하기

한 가지 방법은 대기열 시스템을 AsyncTasks 시리즈로 변경하는 것입니다. onProgressUpdate()을 사용하여 진행 상황을 표시해야합니다.

또 다른 방법은 IntentService를 조정하고 백그라운드 스레드에서 진행률을 얻는 것입니다.

사실, IntentService와 AsyncTask의 멋진 기능을 결합하고 싶습니다. UI 이벤트를 쉽게 처리 할 수있는 대기열 시스템을 만드십시오. 이를 구현하는 가장 좋은 방법이 있습니까?

편집 : IntentServices 대신 AsyncTasks를 사용하게되었습니다. 그러나 IntentService에서 진행 상황을 업데이트하기 위해 공유 할 좋은 패턴이 있다면 의견을 자유롭게 추가하십시오.

+0

취소를 감지하면 데이터를 다시 전송 무시/모든 것을 중지합니다. onPre 및 onPostExecute()에서 doInbackground 및 진행률 바코드에 내 네트워크 호출이 있습니다. 이제 인 텐트 서비스에 매핑하려고합니다. 어떻게 진행 바코드를 처리 할 수 ​​있습니다. 어떤 도움이 될거야 .. – Atihska

답변

2

가 나는 HandlerThread과 처리기

  • 메인 UI 스레드에 대한 핸들러를 받기 시작
    • 을 거라고
    • 후 업데이트를 진행 스레드의 핸들러를 사용하여 백그라운드 스레드에
    • 후 작업과 UI 스레드의 핸들러를 사용하여 UI에 결과 표시

    그런 식으로 하나의 백그라운드 스레드를 사용할 수 있습니다 귀하의 작업 대기열 및 브로드 캐스트를 다루지 않고 UI 스레드에 다시 게시 할 수 있습니다.

  • 1

    저와 함께 IntentService의 경우 진행 표시 줄을 시작할시기와 진행률 표시 줄을 언제 끝내야하는지 방송했습니다. 일반적으로 엔드 파트에 표준 "수신 뒤로"를 사용할 수 있습니다. 다른 의도 브로드 캐스트를 다른 문자열로 등록 할 수 있습니다.

    까다로운 부분은 진행 표시 줄이 취소되었는지를 호출하는 방법을 알아내는 것이었고 REST 호출이 진행되면서 상태 테이블을 업데이트 할 수 있다고 생각했습니다. 테이블에 호출 ID가 있고 작업이 완료되면 항목이 삭제됩니다. 스레드는 활성 상태 여야하는지 테이블을 추적합니다.

    그래서 각 보내기 전에, 나머지 스레드는 테이블을 확인합니다, 그것은 이봐, 나 또한 같은 일을하려고하지만 할 수 있어요

    관련 문제