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

리스트뷰 이미지 다운로드 궁금한점입니다.

0 추천
안녕하세요.

다름이 아니라 이미지 다운로드 궁금한점이 있습니다.

유투브같은 경우에 보니

리스트뷰를 스크롤링하는중에는 이미지다운로드를 받지 않고

스크롤이 정지했을때 받습니다.

그런데 스크롤이 정지해서 이미지를 다운받는 쓰레드가 돌아가는중에

다시 또 아래로 빠르게 스크롤하면 위에서 받던 이미지다운로드 쓰레드들이

다 취소가 되는건가요?

 

요약 : 서버에 잇는 이미지를 다운로드하는 리스트뷰가 있음.

           현재 보여지는 리스트들의 이미지가 다운로드 되는 도중에 스크롤을 이동하여

           화면에 리스트의 다른 항목이 보여지면 전에 수행하던 항목의 이미지다운로드 쓰레드들은 모두 캔슬되는 원리인가요?
갸아악 (21,260 포인트) 님이 2014년 1월 14일 질문

1개의 답변

+1 추천
 
채택된 답변

기본적인 구조는 다음과 같습니다.

큐를 만들어서 쓰레드(이미지를 서버에서 다운받는 작업)를 하나씩 담습니다.

FIFO 또는 LIFO 구조로 하나씩 꺼내서 해당 쓰레드를 처리합니다.

이렇게만 처리하게 될 경우 하나의 프로세스에서 동시에 처리가능한 쓰레드가 제한적이기 때문에

언젠가는 오류를 뿜으며 종료되게 되어있습니다. 그래서 동시 처리가능한 쓰레드에 제한을 두어야 하며,

큐에도 크기 제한을 걸어둡니다. 나중에 쓰레드를 삽입하려고 하는데 큐 사이즈가 다 차있으면 맨 처음에

들어와 있던 쓰레드는 그냥 삭제한다든지 등의 처리가 있어야 합니다.

 

위와 같은 내용은 Android Universal Image Loader 라는 오픈소스를 분석한 결과입니다..

https://github.com/nostra13/Android-Universal-Image-Loader

 

참고하셔서 직접 구현하신 내용에 적용해 보시면 좋을듯 합니다.

Gradler (109,780 포인트) 님이 2014년 1월 14일 답변
갸아악님이 2014년 1월 14일 채택됨
정말 감동적이네요.
세세하게 답변달아주시니 진짜로 감사합니다.
새해 복 많이받으세요.
아무거나냐님
그럼 AUIL 오픈소스에는 이미 적용이 되어 있다는건가요?
만약 AUIL 오픈소스를 사용하면 해당 로직은 구현을 안해도 되는건가요?
적용 되어 있으며 매뉴얼을 잘 읽어보시면 아시겠지만 스크롤중에는 로딩을 멈추게 할 수 있는 옵션을 따로 줄 수가 있습니다.
상용으로 써야 하는 앱이라면 오픈소스를 그대로 사용하시기를 추천드리고(아파치 라이센스이기 때문에 무료로 사용이 가능하나 해당 개발자에게 알려야 하는 의무가 있습니다.), 그냥 공부를 목적으로 하시는거라면 직접 만드시면서 위 소스는 참고만 하시는걸 추천드립니다.
...