본문 바로가기

Android

Picasso 라이브러리의 메모리 해제 방법

Android Picasso 라이브러리는 정말 편리한 안드로이드 이미지 라이브러리입니다.

http://square.github.io/picasso/

이미지 로딩, 인터넷에서 이미지 읽어오기, 부드럽게 화면에 서서히 출력하기 등등 

정말 편리한 기능을 몇 줄의 라인으로, 거의 버그없이 표현가능한 멋진 라이브러리입니다.


살짝 불편한 점이 있는데, 메모리 해제 방법입니다.

인터넷에서 Picasso의 메모리 해제 방법을 찾아보면:


1. Picasso 전체 라이브러리를 받아서, 메모리 해제 부분을 새로 구현해야한다

http://stackoverflow.com/questions/27502659/clear-cache-memory-of-picasso


2. 파일명 / URL을 가지고 있다면 하나씩 하나씩 해제할 수 있다

http://stackoverflow.com/questions/22016382/invalidate-cache-in-picasso


등등의 내용이 있습니다.

하지만 1번 방법을 위해서는 Picasso의 jar를 이용하는게 아니라, 프로젝트를 받아서 빌드해야 하고

2번 방법은... 파일명이나 URL을 모두 기억하고 있는 객체가 필요합니다.


하지만 이 방법 말고 좀 더 편하게 전체 메모리를 해제할 수 있는 방법도 있습니다.

비법은 com.squareup.picasso.LruCache 객체를 생성해서 picasso에 넣어주는 것입니다.


먼저... 선언을 하고,

private Picasso picasso;
private LruCache picassoLruCache;

생성을 한 뒤 LruCache를 넣어줍니다.

picassoLruCache = new LruCache(this);
picasso = new Picasso.Builder(this) //
        .memoryCache(picassoLruCache) //
        .build();


그리고 나서, 필요한 시점 (제 경우에는 onDestory) 에서 메모리 클리어를 눌러주면 메모리 해제 완료!

@Override
    protected void onDestroy() {
        super.onDestroy();
        picassoLruCache.clear();
    }

DDMS에서 확인해 보니, 제 경우에는 시작 시 11메가 -> 이미지 로딩 시 20메가 -> 메모리 해제 시 11메가로 완벽하게 동작했습니다.



* http://markup.su/highlighter/ 로 코드를 컬러링했습니다