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
이상 은 글 라 이 드 의 일반적인 용법 으로 개발 수 요 를 대체적으로 만족 시 킨 다음 에 다른 관련 지식 을 배 워 보 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.