마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

AsyncTask 사용 관련 질문..

0 추천
AsyncTask를 사용해서 Thread를 돌리고 있습니다..

근데 Task 안에서 다른 클래스의 메서드를 사용 하는 부분이 있습니다.

불려지는 해당 메서드에서는 While(true)로 무한루프를 돌고 있구요,

 

저는 해당 Thread객체를 wait 시켜버리면, Task안에서 불려지는 메서드의 반복루프도

멈추는줄 알았는데 아니더군요.. 그래서 일단 반복루프에 스레드가 Cancel 되었는지 확인 할수 있는,

Boolean값의 변수를 하나 추가해서 진행은 하려고하는데요.

 

제가 Task(Thread)에 개념이 잘 안잡힌거 같아서..

여기서 질문이 Task 내부에 정의한 코드동작과 Task 안에서 불려지는 클래스의 메서드의

동작의 차이를 좀 설명 해주시면 감사하겠습니다..

 

추가로 질문 사항이,, 해당 Task에서 불려진 클래스의 메서드안에서 UI의 수정을 하고 싶다면,,

어떤 방법으로 접근하는게 가장 효율적이고 좋을까요..?

지금 생각나는 방법은 그냥 부를때 갱신하고자 하는 UI객체를 같이 넘겨서 그냥 클래스 안에서

값을 수정해버리려고 하는데, 문제가 있을까요..?
익명사용자 님이 2014년 7월 8일 질문

1개의 답변

0 추천
 
채택된 답변
우리가 보통 일반Thread만을 사용하면 UI처리를 하지못합니다 그래서 Thread에 UI처리를 할수있게 Handler클래스를 만들어서 Thread에 Message객체를 생성해서 UI 처리를합니다

AsyncTask라는 비동기처리 클래스는 그번거로운작업을 하나의 클래스에 각가의 주기마다 Callback을 받아서 처리를합니다

AsyncTask 비동기처리 클래스의 내부를 분석해보면

onPreExecute --> 백그라운드작업을 진행하기전 UI처리

doInBackground --> 백그라운드작업 (UI처리불가)

onPostExecute --> 백그라운드작업이 끝난후 결과값으로 UI처리

onCancelled --> 비동기처리 취소시 onPostExecute를 안타고 취소가된다

 

추가질문주신것은 onPostExecute메서드에서 처리하여서 Handler클래스를 하나만들어서

Thread(Background작업) -> Handler(UI처리)로 보내시면 될거같습니다
whdrb19 (23,520 포인트) 님이 2014년 7월 8일 답변
관심가져주시고 답변 해주셔서 감사합니다.
추가로 하나만 더 물어봐도 될까요..?
저는 UI객체를 직접 호출되는 클래스로 보내서 해당 클래스안에서
UI를 수정 하려고 했었는데,, 이 방법과 whdrb19님께서 말해주신
Handler클래스를 만들어 Handler를 호출해서 UI를 수정하는것의
차이점이 뭔가요.. 비동기, 동기 처리의 차이인가요..?
...