ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [이미지] 안드로이드 이미지 처리 라이브러리 Glide
    Programing/Android 2016. 3. 31. 22:48

    안드로이드 이미지 처리 라이브러리

    Glide



    안드로이드를 개발할때 어플리케이션이 점점 완성이 되갈 수록 정말 많이 보는 Error 메시지가 있다.

    OOM!!!! 바로 Out Of Memory다.

    말그대로 메모리가 꽉 찾다는 것이다. 굳이 따지자면 Heap영역에 메모리가 찾다는 것인데, 

    Heap이란 즉슨 Ram에 가용 메모리이상 넘어 갔다는 말이다.

    여러가지이유가 있겠지만, 대부분 초기화를 잘 안했던지 Activity위주로 앱을 개발해서 엄청나게 쌓여있다던지 등등

    특히 이미지가 많이 로딩되는 앱을 개발할땐 특히 자주 보이는 에러메시지 중 하나다.


    보이는 그림보다 필요 이상의 크기의 사용 하던지, 엄청나게 많은 양의 이미지를 사용한다든지 여러 이유가 있다. 

    동적으로 이미지가 계속 변하는 ImageView를 사용하거나 Adapter를 이용하여 ListView 등에 사진을 여러개 띄울때 대체적으로 자주 보인다.


    필자도 공부하는 입장으로 OOM에 대한 해결법을 계속 찾고 있다. OOM은 끝나지 않는 숙제같다..

    (List View의 업그레이드판인 Recycler View를 사용하면서 View Holder로 이미지를 저장하는 방법도 최근에야 알았다.)


    하여튼! OOM의 가장 큰 주적은 80%는 이미지라고 생각한다.

    그러던 중 Glide라는 라이브러리를 알게 되었다.

    이미지 로딩 라이브러리인데 이거 참 좋다.


    이미 시중에 이미지 로딩 라이브러리는 상당히 많다.

    AUIL, Aquery, Picasso, Fresco 등등등

    각 라이브러리의 특징은 구글링 하면 많이 나오므로 생략(사실 너무 많은 특징이 있어서...못적어ㅠㅠ)


    그중 Glide에 대해서 소개를 할까 한다.


    일반적으로 ImageView에 그림을 넣을때 객체를 생성한 후 리소스로 그림을 넣던지 비트맵객체를 이용해서 넣던지 한다.


    예를 들어 준비된 그림은 1920*1080의 해상도이고 표현할 Image View의 크기는 300*400이라고 가정하면,

    이미지 자체가 박히는 것이라서 우리가 표현할 양은 300*400짜리 해상도인데 그림은 1920*1080인 상태로 들어간다.

    그러면 300kb면 충분하게 표현될 양인데 의미없이 3메가 짜리 그림을 메모리에 올려버리는 것이다.

    그런일이 한두번이면 상관 없는데 연속적으로 계속 일어나면? OOM...

    거기에 해제를 안해주고 계속 set을 해준다면?? OOM...


    하지만 Glide를 사용하면 알아서 Resize 해준다.

    또한 그림을 캐시화해서 알아서 같은 그림을 처리하면 캐시에 있는 그림을 가져온다.


    사용법 역시 간단하다.

    Glide.with(context).into(imageView);

    이러면 된다.

    게다가 각 종 옵션을 줄 수 있는데,

    .load(url) - url에 있는 이미지를 로딩한다.

    .thumbnail(0.1f)  - 10%사이즈로 그림을 줄여서 보여준다.

    .fitCenter - 뷰의 크기에 맞게 그림을 중앙 맞춘다.

    .placeholder(R.img) - 로딩될때 홀더를 지정

    .error(R.img) - 이미 로딩이 안되었을시 이미지 지정

    등등 아주 많은 옵션이 있다.


    기존 라이브러리들과 차별되는 점은 url형식의 이미지가아닌 Res에 있는 로컬 이미지역시 사용이 가능하단것이다.

    그래서 정적인 뷰 역시 glide로 다 처리를 해줄 수 있다.


    이미지때문에 고생을 하고 있다면, 상당히 추천할만한 라이브러리임에는 틀림없다.



    한줄요약

    -Glide가 짱짱맨이긴 한데 그래도 이미지 사이즈는 최적화해서 쓰자!



    괜찮은 정보였다면 공감버튼 꾸욱!

    (비회원도 가능합니다.)


    댓글

Designed by Tistory.