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

카톡 사진선택 기능같은걸 만드는데 AsyncTask 중복로딩을 막을 방법이?

0 추천
안녕하세요.

가지고있는 전체 사진을 보여주는 기능을 만들고 있습니다.

카톡의 이미지 선택화면과 거의 똑같은 기능이에요.

ContentResolver 를 사용해서 목록을 불러오고, GridView 로 화면에 표시합니다.

LruCache 와 AsyncTask를 이용해 비트맵 로드를 하고있고요.

 

그런데 천천히 스크롤 할때는 아무 문제 없이 잘 되는데

스크롤을 아주 빠르게 아래로 내리면 문제가 생겨서 도움 요청 드려요.

 

첫번째 문제는 느려지는 증상인데요

ListAdapter 의 getView 에서 LruCache에 데이터가 없는 경우 AsynkTask 로 비트맵을 로드 하는데요

이게 아주 빠르게 촤라락 나오게 되면 AsyncTask가 수십개가 한번에 실행이 되는것 같아요

로딩이 느려지는 증상이 있더라고요.

검색해보니 AsyncTask를 바로 종료시킬수는 없는것 같길래 flag를 하나 추가해서 중간에 끊을수 있도록 작업은 했지만

비트맵 로드하는 중간에 끊기는건 아닌것 같더라고요.

뭔가 해결 방법이 없을까요?

 

두번째 문제는 GridView 는 리스트 아이템을 재사용 하는것으로 알고있는데

A 이미지를 로드하도록 AsynkTask가 돌고있는 상황에서 스크롤을 빨리굴려서

로딩이 끝나기 전에 B 이미지를 AsyncTask가 요청해 버리면

스크롤을 멈추고 보고있는 상황에서 이미지가 휙휙 바뀌더라고요.

이부분도 현재 특별히 해결할 방법을 아직은 못 찾고 있는 상태입니다.

 

위 두가지 문제에 대한 해결책이나 조언 부탁드리겠습니다

감사합니다.
익명사용자 님이 2016년 6월 15일 질문
Android Universal Image Loader lib를 사용하시면 다 해결됩니다

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...