안드로이드 Listview의 imageView 멀티쓰레드 적용시 다운로드중 배경이미지 적용하기

 
반응형
처음으로 안드로이드 앱을 만들고 있는데, 배운지 얼마 되지 않아서 이것저것 찾아보는 시간이 더 걸리네요...

최근에 xml 파싱을 통해서 공연정보를 뿌려주는 화면을 만들고 있는데,
이미지뷰때문에 속도가 상당히 느립니다.

쓰레드와 소프트레퍼런스(softreference)를 이용하면 속도가 좋아진다고 해서 찾아보니 멋진 공개 소스가 있더군요.

Multithreading For Performance

[한글번역] 안드로이드 멀티 스레드를 통한 성능 향상

위 소스를 참고해서 만드시면 됩니다.


속도 향상 퍼포먼스 문제는 해결이 되었는데, 위의 예제는 이미지파일이 다운로드되기 전까지는 검은색 배경화면을 사용했는데, 다른 이미지로 구현을 하려고 했는데, 잘 안되고, 마땅한 답변이 없어서 한참을 찾다가 해결을....-_-;;
뭐 고수분들이야 금방했겠지만, 저같은 초보분들은 참고하시길...

### java
//static class DownloadedDrawable extends ColorDrawable {
static class DownloadedDrawable extends BitmapDrawable {
    private final WeakReference<BitmapDownloaderTask> bitmapDownloaderTaskReference;

    public DownloadedDrawable(BitmapDownloaderTask bitmapDownloaderTask, Context context) {
        // super(Color.BLACK);
        super(BitmapFactory.decodeResource(context.getResources(), R.drawable.loading));
        bitmapDownloaderTaskReference = new WeakReference<BitmapDownloaderTask>(bitmapDownloaderTask);
    }

    public BitmapDownloaderTask getBitmapDownloaderTask() {
        return bitmapDownloaderTaskReference.get();
    }
}

소스중에 위와 같은 구문이 있는데, ColorDrawable 에서 상속받은것을 우선 BitmapDrawable에서 상속을 받습니다.

super(BitmapDrawable(R.drawable.loading));
가 오류가 나지 않아도, 이미지가 나오지 않는데, context가 없어서 이걸 넘겨받아야 합니다.
생성자를 호출할때 context를 받아와야 제대로 출력을 할수 있으므로,
super(Color.BLACK); 를 아래와 같이 변경해 줍니다.
super(BitmapFactory.decodeResource(context.getResources(), R.drawable.loading));

### java
case CORRECT:
                    task = new BitmapDownloaderTask(imageView);
                    // DownloadedDrawable downloadedDrawable = new DownloadedDrawable(task);
                    DownloadedDrawable downloadedDrawable = new DownloadedDrawable(task, imageView.getContext());
                    imageView.setImageDrawable(downloadedDrawable);
                    imageView.setMinimumHeight(156);
                    task.execute(url);
                    break;

그리고나서 forceDownload 메쏘드에 가서 위처럼 또 변경을 해주시면 됩니다.

찾고나니 간단한데, 이걸 하느랴고 몇시간이 걸렸는지...-_-;;
남의것을 그냥 가져다가 쓰는것이 쉽지가 않네요.
아무쪼록 조금이나마 도움이 되시길 바라겠습니다.
반응형