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

listview 에서 asynctask와 thread 차이가 궁금합니다

0 추천
안녕하세요

리스트뷰에서 각행에 프로그래스바가 돌다가 2초후에 이미지가 invisible -> visible로 변경되는 코드를 짯습니다

thread.sleep(2000) 후 visible을 하는코드입니다

그런데 asynctask 와 thread,handler와는 좀 모양세가 달라서 질문드립니다

제가  lstivew  arrayadapter 에서 getview 안에서 new asynctask.execute(view) 로 실행한것과 thread나 handler로 2초후에 이미지를 view하는 코드를 작성했더니

thread나 handler는 2초후에 모든행이 거의 동시에 바뀌는 반면에 asynctask는 2초후에 한행만 visible이 되고 또 2초후에 그밑에행...2초후그밑에행...이렇게 순차적으로 visible이 됩니다

간단히 얘기해서 10개행이있으면

thread나 handler는 2초후에 10개행이 다visible이 되고

 asynctask는 2초후에 1개씩.... 20초는지나야 이미지가 다 visible됩니다

마치 asynctask의 객체를 new로 여러개 생성해도 doinbackground 혹은 thread.sleep을 공통으로 쓰는듯한반응?입니다

혹시 왜그런지 알수있을까요
생초 (1,110 포인트) 님이 2013년 7월 25일 질문
생초님이 2013년 7월 25일 수정

3개의 답변

+2 추천
 
채택된 답변

http://developer.android.com/intl/ko/reference/android/os/AsyncTask.html

Order of execution


When first introduced, AsyncTasks were executed serially on a single background thread. Starting with DONUT, this was changed to a pool of threads allowing multiple tasks to operate in parallel. Starting with HONEYCOMB, tasks are executed on a single thread to avoid common application errors caused by parallel execution.

If you truly want parallel execution, you can invoke executeOnExecutor(java.util.concurrent.Executor, Object[]) with THREAD_POOL_EXECUTOR.

Elex (9,090 포인트) 님이 2013년 7월 25일 답변
생초님이 2013년 7월 26일 채택됨
영어공부해야겟다 진짜..
+1 추천

Elex님께서 주신 정보로 보면,

처음 어싱크테스트가 나왔을때는 단일 백그라운드 쓰레드로 동작이 되었었는데,

도넛을 시작으로 바꼇다고 하네요.

병렬작업이 가능하도록 쓰레드풀 방식으로 변경되었다고 합니다.

허니콤부터 병렬처리때문에 많이 발생되는 오류들을 막기 위해서 단일 쓰레드로 동작 된다고 합니다.

만약에 님이 절실히 병렬 처리를 하고 싶으시면 아래의 메커니즘을 적용하라고 합니다.

 

 executeOnExecutor(java.util.concurrent.Executor, Object[]) 

with THREAD_POOL_EXECUTOR.

 

저도 궁금해서 사전+구글번역 해봤습니ㅏ.

갸아악 (21,260 포인트) 님이 2013년 7월 25일 답변
0 추천
감사합니다^^ 좋은공부가되었습니다
생초 (1,110 포인트) 님이 2013년 7월 26일 답변
...