2013-02-07 1 views
1

DB 읽기와 같이 오랜 시간 작업을 수행하기 위해 asynctask를 사용하고 있습니다. 모든 비동기 작업이 완료되면 새로운 활동을 시작하고 내용을 렌더링하고 싶습니다. 이것을 달성하는 가장 좋은 방법은 무엇입니까?"all"asynctasks 수행시 화면 업데이트

화면을 업데이트하는 데 onPostExecute가 사용된다는 것을 알고 있습니다. 단지 모든 onPostExecute에서 증가 도착 카운터를 사용하지만 모든 THER ayncTasks가 그것을 복잡하게하지 마십시오 감사

답변

4

도와주세요

을 수행하지 않는 화면을 업데이트 할니까. 태스크가이 카운터를 최대 (생성 된 태스크 수와 같음) 것으로 발견하면 업데이트 코드를 실행할 수 있습니다.

onPostExecute이 UI 스레드에서 실행되기 때문에이 카운터 주위로 잠글 필요가 없습니다.

+0

Ove this suggestion! 영리 한 : – Snake

1

그냥 제안, 당신은 Asynctask의 수를 크기가 부울의 배열을 만들 수 있습니다. 각 Asynctask에는 부울 배열에 대한 인덱스 인 ID가 있습니다. onPostExecute 또는 다른 콜백에서 모든 항목이 참인지 확인할 수 있습니다. 그렇다면 모든 것이 완료되었음을 알 수 있습니다. 또 다른 방법은 Asynctask의 각각에 대해 고유 한 ID를 할당하고 그 ID의 합계를가집니다. 그 중 하나가 완료되면 ID에서 해당 ID를 뺍니다. 0에 도달하면 해당 ID를 알 수 있습니다. 다 끝났어. 완벽하지는 않아, 단지 약간의 제안.

+0

고마워요. 나는 다른 솔루션을 좋아하지만 다른 사용자는 더 간단합니다. 하나. +1 – Snake

관련 문제