안드로이드 개발 질문/답변
(글 수 45,052)
아이스크림샌드위치 이후 부터는 파싱할때 스레드를 사용하여 파싱을 해야 한다고 하더라구요
그래서 AsyncTask를 이용하여 파싱을 하려고 하는데
파싱을 여러 url에서 자주 일어 나거든요
AsyncTask는 백그라운드에서 작업을 하다 보니깐 메인스레드에서 파싱을 요청하고
그 파싱한거의 리턴값을 받기도 전에 다음 파싱을 실행하다보니깐 에러나고 꼬이더라구요
하나의 AsyncTask가 작업을 완료할때까지 메인쓰레드가 대기하게 할순 없나요 ??
2012.10.09 19:59:58
메인에서 AsyncTask1 을 호출뒤 결과를 받고 AsyncTask1 에서 AsyncTask2를 호출하면 되겠네요.
한번에 여러 쓰레드를 호출하고 결과는 순차적으로 처리를 해야되니 당현히 생기는 문제인거 같네요.
2012.10.09 20:09:29
일단 메인쓰레드에서는 다른 쓰레드가 완료될 때까지 대기해서는 안됩니다.
다른 쓰레드에서 5초 이상 작업을 하게되면, ANR이 걸릴 수 있기 때문입니다.
그리고 글을 읽어보면, AsyncTask가 끝나기전에 다시 AsyncTask를 시작하면 오류가 난다는 것 같은데...
구조적 문제가 아닐까요..? AsyncTask를 사용한다고 문제가 되지는 않을 것 같습니다.
혹시 오류가 났다면 logcat을 볼 수 있을까요??
이건 상관없을 것 같은 내용이긴하지만...
ListView에 AsyncTask를 사용해서 데이터를 업데이트한다고 가정하면, 동기화를 맞추지 않을 경우 운이 없으면 오류가 발생 할 수도 있습니다. AsyncTask에서 데이터를 추가하고 메인쓰레드에서 ListView의 notifyDataSetChanged()를 호출 할 때,
ListView가 화면이 갱신되고 있는데, 그 순간 실제 데이터가 변경되면 exception이 날 수가 있게 됩니다.
그 외에도 코드의 구조적 문제로 비슷한 exception이 날 수 있습니다.
url 하나당 thread하나를 돌리시는 건가요?
저는 asyncTask를 사용하지 않아서 잘 모르지만..(그냥 Thread사용..^^;;)
url이 꼭 리턴이 되야 다른 url이 실행 가능하다면
하나의 thread에 넣어서 돌려야 하는 부분같은데..
저는 그렇게 사용합니다^^;;
확실하진않네요..AsyncTask를 사용해 본적이없어서..ㅠㅠ