Android 이미지 캐 시 초기 인식 Glide(3)

선언:
앞에서 그림 의 사용 과 Lru 알고리즘 을 총 결 하여 배 웠 습 니 다.오늘 은 비교적 우수한 이미지 캐 시 오픈 소스 프레임 워 크 를 배 워 보 겠 습 니 다.기술 자 체 는 계속 바 뀌 어야 한다.처음에 자신 이 SoftReference 를 사용 하여 자신의 이미지 캐 시 를 실현 한 후부 터 전자상거래 프로젝트 자체 의 실현 방안 이 프로젝트 의 수 요 를 만족 시 키 지 못 하고 Afinal 로 바 뀌 었 다.Afinal 은 더 이상 유지 하지 않 기 때문에 같은 문 을 나 서 는 Xutils 를 선택 했다.중간 에 다른 오픈 소스 구조,예 를 들 어 Picasso 를 접 했 기 때문에 Picasso 에 대한 첫 인상 이 좋 지 않다.첫 번 째 접촉 은 회사 가 아웃 소 싱 회사 에서 방금 인수 한 이미지 소 셜 앱 을 받 았 습 니 다.메모리 에 대한 점용 이 너무 크 고 직접적인 느낌 은 ListView 가 미 끄 러 지 는 데 약간의 카드 가 걸 렸 습 니 다.오래된 이미지 캐 시 프레임 워 크 인 유 니 버 설 이미지 로 더 는 들 어 본 적 이 있 습 니 다.예전 에 프로젝트 가 작 았 고 몇 백만 등급 차이 가 나 지 않 는 app 은 모두 Xutils 를 사 용 했 습 니 다.최근 프로젝트 가 커 졌 다 고 생각 합 니 다.만약 에 Xutils 가 유지 하지 않 거나 지원 을 요구 하 는 이미지 형식 이 많아 지면 Xutils 가 최선 의 선택 이 아 닐 수도 있 습 니 다.이것 도 Gilde 를 배 우 는 근본 적 인 동기 입 니 다.사실 페 이 스 북 의 Fresco 이미지 프레임 워 크 를 배 우려 고 했 지만 간단하게 살 펴 보 니 사용자 정의 컨트롤 과 함께 사용 해 야 합 니 다.기능 은 강하 지만 이미 유지 하고 있 는 프로젝트 의 수정 비용 은 보통 높 지 않 습 니 다.앞으로 공부 에 관심 이 있 으 시 죠? 
Glide 프로필:
Glide 는 Google 직원 의 오픈 소스 프로젝트 로 Google I/O 에서 추천 되 며 효율 적 이 고 오픈 소스,Android 장치 의 미디어 관리 프레임 워 크 로 BSD,MIT,Apache 2.0 프로 토 콜 에 따라 발 표 됩 니 다.Glide 는 비디오 스틸,이미지,애니메이션 등 을 가 져 오고 디 코딩 하 며 보 여 주 는 기능 을 가지 고 있 으 며 유연 한 API 도 있어 개발 자 들 이 Glide 를 거의 모든 네트워크 프로 토 콜 스 택 에 응용 할 수 있 습 니 다.Glide 를 만 드 는 주요 목적 은 두 가지 가 있 습 니 다.하 나 는 부 드 러 운 그림 목록 스크롤 효 과 를 실현 하 는 것 이 고 다른 하 나 는 원 격 그림 의 가 져 오기,크기 조정 과 보 여 주 는 것 을 지원 합 니 다.
 gitHub 주소:https://github.com/bumptech/glide 
글 라 이 드 특징
 •사용 이 간단 하 다
 •설정 가능 도가 높 고 자가 적응 정도 가 높 습 니 다.
 •일반적인 그림 형식 지원 Jpg png gif webp
 •다양한 데이터 원본 지원  네트워크,로 컬,자원,자산 등
 •고 효율 캐 시 정책    Memory 와 Disk 이미지 캐 시 지원 기본 Bitmap 형식 은 RGB565 메모리 사용 최소 절반 감소
 •라 이 프 사이클 통합   Activity/Fragment 수명 주기 에 따라 자동 관리 요청
 •효율 적 인 처리 비트 맵  Bitmap Pool 을 사용 하여 Bitmap 를 재 활용 하고,회수 해 야 할 Bitmap 를 재 활용 하여 시스템 회수 압력 을 줄 입 니 다. 
글 라 이 드 심 플 사용
 1.)참조 build.gradle 에 설정 추가
 compile 'com.github.bumptech.glide:glide:3.7.0'
2.)귀속 생명주기 설정 
저 희 는 Glide 가 제공 하 는 방식 으로 바 인 딩 을 더욱 효율 적 으로 사용 할 수 있 습 니 다.그러면 그림 을 불 러 오 라 는 요청 의 생명 주 기 를 동적 으로 관리 할 수 있 습 니 다. 

 Glide.with(Context context);//   Context
 Glide.with(Activity activity);//   Activity
 Glide.with(FragmentActivity activity);//   FragmentActivity
 Glide.with(Fragment fragment);//   Fragment 
3.간단 한 그림 불 러 오기 인 스 턴 스 
 Glide.with(this).load(imageUrl).into(imageView);
4.)불 러 오 는 중 및 불 러 오 는 데 실패 한 그림 설정 
api 에서 placeholder(),error()함수 에 다 중 구현 이 있 을 때 구체 적 으로 숙지 할 수 있 습 니 다.
Glide.with(this).load(imageUrl).placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(imageView); 
5.메모리 캐 시 건 너 뛰 기 설정 
 Glide.with(this).load(imageUrl).skipMemoryCache(true).into(imageView);
6.)다운로드 우선 순위 설정 
Glide.with(this).load(imageUrl).priority(Priority.NORMAL).into(imageView);
7.)캐 시 정책 설정 
Glide.with(this).load(imageUrl).diskCacheStrategy(DiskCacheStrategy.ALL).into(imageView);
정책 설명: 
all:캐 시 소스 자원 과 변 환 된 자원 
none:디스크 캐 시 를 하지 않 습 니 다. 
소스:캐 시 소스 자원 
result:캐 시 변환 후의 자원 
8.로 딩 애니메이션 설정 
api 도 자주 사용 하 는 애니메이션 을 제공 합 니 다.예 를 들 어 crossFade() 
  Glide.with(this).load(imageUrl).animate(R.anim.item_alpha_in).into(imageView); R.anim.item_alpha_in

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
  <alpha
    android:duration="500"
    android:fromAlpha="0.0"
    android:toAlpha="1.0"/>
</set>
9.미리 보기 그림 지원 설정 
미리 보기 그림 을 불 러 오고 전 그림 을 불 러 옵 니 다. 
 Glide.with(this).load(imageUrl).thumbnail(0.1f).into(imageView);
10.)로 딩 크기 설정 
 Glide.with(this).load(imageUrl).override(800, 800).into(imageView);
11.)동적 변환 설정 
 Glide.with(this).load(imageUrl).centerCrop().into(imageView); 
api 는 예 를 들 어 centerCrop(),fitCenter()등 함수 도 사용자 정의 Transformation 을 통 해 예 를 들 어 한 사람의 원 각 변환기 등 을 제공 합 니 다. 

 public class GlideRoundTransform extends BitmapTransformation {
  private float radius = 0f;
  public GlideRoundTransform(Context context) {
   this(context, 4);
  }

  public GlideRoundTransform(Context context, int dp) {
   super(context);
   this.radius = Resources.getSystem().getDisplayMetrics().density * dp;
  }

  @Override
  protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
   return roundCrop(pool, toTransform);
  }

  private Bitmap roundCrop(BitmapPool pool, Bitmap source) {
   if (source == null) return null;

   Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
   if (result == null) {
    result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
   }
   Canvas canvas = new Canvas(result);
   Paint paint = new Paint();
   paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
   paint.setAntiAlias(true);
   RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight());
   canvas.drawRoundRect(rectF, radius, radius, paint);
   return result;
  }

  @Override
  public String getId() {
   return getClass().getName() + Math.round(radius);
  }
 }

구체 적 으로 사용 하 다 
Glide.with(this).load(imageUrl).transform(new GlideRoundTransform(this)).into(imageView);
12.)불 러 올 내용 설정 
프로젝트 에는 먼저 그림 을 다운로드 한 다음 에 합성 기능 을 해 야 하 는 경우 가 많다.예 를 들 어 프로젝트 에 나타 난 그림 과 글 을 혼합 해서 목 표를 어떻게 실현 해 야 하 는 지 등 이다. 

 Glide.with(this).load(imageUrl).centerCrop().into(new SimpleTarget<GlideDrawable>() {
   @Override
   public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) {
    imageView.setImageDrawable(resource);
   }
  });
13.)감청 요청 인터페이스 설정 

 Glide.with(this).load(imageUrl).listener(new RequestListener<String, GlideDrawable>() {
   @Override
   public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
    return false;
   }

   @Override
   public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
    //imageView.setImageDrawable(resource);
    return false;
   }
  }).into(imageView);

감청 의 용 도 를 설정 하면 요청 에 오류 가 발생 한 원본 과 그림 원본 이 메모리 인지 디스크 인지 감시 하 는 데 사용 할 수 있 습 니 다. 
14.)동적 GIF 로 딩 방식 설정  

Glide.with(this).load(imageUrl).asBitmap().into(imageView);//  gif    
 Glide.with(this).load(imageUrl).asGif().into(imageView);//  gif     
 15.)캐 시 동적 청소  

Glide.get(this).clearDiskCache();//                
 Glide.get(this).clearMemory();//          UI       
이상 은 글 라 이 드 의 일반적인 용법 으로 개발 수 요 를 대체적으로 만족 시 킨 다음 에 다른 관련 지식 을 배 워 보 겠 습 니 다.

좋은 웹페이지 즐겨찾기