Android 이미지 캐 시 원리,특성 대비

7327 단어 Android그림 캐 시
이것 은 제 가 MDCC 에서 공유 한 내용(약간 변경)이자 소스 코드 분석 1 기 발표 때 소개 한 소스 코드 분석 이 나중에 천천히 할 것 입 니 다.
전체적인 디자인 과 원리 에서 몇 개의 이미지 캐 시 를 비교 하면 그들의 친구 가 사용 하지 않 아 도 그들 이 특정한 특성 에서 의 실현 을 알 수 있다.
1.4 대 이미지 캐 시 기본 정보

Universal ImageLoader 는 초기 에 많이 사 용 된 이미지 캐 시 입 니 다.
피 카 소 는 스 퀘 어 오픈 프로젝트 이 고 그의 주도 자 는 제 이 크 와 튼 이어서 널리 알려 져 있다.
글 라 이 드 는 구 글 직원 들 의 오픈 소스 프로젝트 로 일부 구 글 앱 에서 사용 되 고 있 으 며,지난해 구 글 I/O 에서 추 천 받 았 지만,현재 국내 에 서 는 자료 가 많 지 않다.
Fresco 는 페 이 스 북 이 올 상반기 에 오픈 한 이미지 캐 시 로 주요 특징 은 다음 과 같다.
(1)두 개의 메모리 캐 시 에 네 이 티 브 캐 시 를 더 해 3 급 캐 시 를 구성 했다.
(2)스 트림 을 지원 합 니 다.웹 페이지 의 모호 한 점진 적 으로 그림 을 표시 할 수 있 습 니 다.
(3)다 중 프레임 애니메이션 이미지 에 대한 지원 이 좋 습 니 다.예 를 들 어 Gif,WebP 등 입 니 다.
Fresco 가 아직 정식 1.0 버 전 을 발표 하지 않 았 음 을 감안 하여 Fresco 소스 코드 를 숙지 할 시간 이 많 지 않 았 고 뒤의 대 비 는 Fresco 를 포함 하지 않 았 으 며 나중에 시간 이 있 으 면 대 비 를 추가 할 수 있 습 니 다.
더 많은 그림 캐 시 라 이브 러 리 를 볼 수 있 습 니 다:Android 그림 캐 시 라 이브 러 리
2.기본 개념
본 격 적 으로 비교 하기 전에 먼저 몇 개의 이미지 캐 시 에서 통용 되 는 개념 을 알 아 보 세 요.
(1)RequestManager:생 성 및 관리 모듈 요청
(2)Engine:엔진 부분,작업 생 성(데이터 획득)을 담당 하고 실행 을 예약 합 니 다.
(3)GetDataInterface:데이터 가 인 터 페 이 스 를 가 져 오고 각 데이터 소스 에서 데 이 터 를 가 져 옵 니 다.
예 를 들 어 Memory Cache 는 메모리 캐 시 에서 데 이 터 를 가 져 오고 DiskCache 는 로 컬 캐 시 에서 데 이 터 를 가 져 오 며 다운로드 기 는 네트워크 에서 데 이 터 를 가 져 오 는 등 이다.
(4)Displayer:자원(그림)모니터 로 자원 을 표시 하거나 조작 할 수 있 습 니 다.
예 를 들 어 ImageView,이 몇 개의 이미지 캐 시 는 ImageView 만 지원 하 는 것 이 아니 라 다른 View 와 가상 Displayer 개념 도 지원 합 니 다.
(5)프로세서 자원(그림)프로세서
회전,압축,캡 처 등 자원 처 리 를 책임 집 니 다.
상기 개념의 호칭 은 이미지 캐 시 에 따라 다 를 수 있 습 니 다.예 를 들 어 Displayer 는 ImageLoader 에서 ImageAware 라 고 부 르 고 Picasso 와 Glide 에서 Target 이 라 고 부 릅 니 다.
3.공통 적 인 장점
1.사용 이 간단 하 다
하나의 코드 를 통 해 그림 을 가 져 오고 표시 할 수 있 습 니 다.
2.설정 가능 도가 높 고 적응 도가 높다
그림 캐 시 다운로드 기(재 시도 메커니즘),디코더,모니터,프로세서,메모리 캐 시,로 컬 캐 시,스 레 드 탱크,캐 시 알고리즘 등 은 대부분 쉽게 설정 할 수 있 습 니 다.
적응 정도 가 높 고 시스템 성능 에 따라 캐 시 설정 을 초기 화 하 며 시스템 정보 변경 후 동적 으로 정책 을 조정 합 니 다.
예 를 들 어 CPU 핵 수 에 따라 최대 병발 수 를 정 하고 사용 가능 한 메모리 에 따라 메모리 캐 시 크기 를 정 하 며 네트워크 상태 변화 시 최대 병발 수 를 조정 하 는 등 이다.
3.다단 계 캐 시
최소 2 단계 캐 시 를 사용 하여 그림 로드 속 도 를 높 입 니 다. 
4.다양한 데이터 원본 지원
다양한 데이터 원본,네트워크,로 컬,자원,자산 등 지원
5.다양한 디 스 플레이 지원
ImageView 뿐만 아니 라 다른 View 및 가상 Displayer 개념 도 지원 합 니 다.
다른 작은 공통점 으로 는 애니메이션 지원,transform 처리 지원,EXIF 정보 획득 등 이 있다.
4.ImageLoader 디자인 및 장점

1.전체적인 디자인 과 절차
위 는 ImageLoader 의 전체적인 설계도 입 니 다.전체 라 이브 러 리 는 ImageLoaderEngine,Cache 및 ImageDownloader,ImageDecoder,BitmapDisplayer,BitmapProcessor 5 대 모듈 로 나 뉘 는데 그 중에서 Cache 는 Memory Cache 와 DiskCache 두 부분 으로 나 뉜 다.
쉽게 말 하면 ImageLoader 는 그림 을 불 러 오고 표시 하 는 작업 을 받 고 이 를 ImageLoader Engine 에 맡 기 는 것 입 니 다.ImageLoader Engine 은 구체 적 인 스 레 드 탱크 에 작업 을 나 누 어 수행 합 니 다.작업 은 Cache 와 ImageDownloader 를 통 해 그림 을 가 져 옵 니 다.중간 에 BitmapProcessor 와 ImageDecoder 처 리 를 거 칠 수 있 습 니 다.최종 적 으로 비트 맵 으로 전환 해서 비트 맵 디 스 플레이 어 에 전달 하면 ImageAware 에 표 시 됩 니 다.
2.ImageLoader 장점
(1)다운로드 진행 감청 지원
(2)View 스크롤 에서 그림 불 러 오 기 를 일시 정지 할 수 있 습 니 다.
PauseOnScroll Listener 인 터 페 이 스 를 통 해 View 스크롤 에서 그림 불 러 오 는 것 을 중단 할 수 있 습 니 다.
(3)다양한 메모리 캐 시 알고리즘 기본 구현 이 몇 개의 그림 캐 시 는 모두 캐 시 알고리즘 을 설정 할 수 있 지만 ImageLoader 는 기본적으로 비교적 많은 캐 시 알고리즘 을 실현 했다.예 를 들 어 Size 최대 먼저 삭제,최소 먼저 삭제,최근 최소 사용,선진 먼저 삭제,시간 최 장 먼저 삭제 등 이다.
(4)로 컬 캐 시 파일 이름 규칙 정의 지원
5.Picasso 디자인 및 장점

1.전체적인 디자인 과 절차
위 는 Picasso 의 전체적인 설계도 입 니 다.전체 라 이브 러 리 는 Dispatcher,RequestHandler 및 Downloader,Picasso Drawable 등 모듈 로 나 뉜 다.
Dispatcher 는 제출,일시 정지,계속,취소,네트워크 상태 변화,재 시도 등 을 포함 하여 Action 을 배포 하고 처리 합 니 다.
쉽게 말 하면 Picasso 는 그림 을 불 러 오고 표시 하 는 작업 을 받 았 습 니 다.Request 를 만 들 고 Dispatcher 에 게 전달 합 니 다.Dispatcher 는 구체 적 인 RequestHandler 에 작업 을 나 누 어 주 었 습 니 다.작업 은 Memory Cache 와 Handler(데이터 획득 인터페이스)를 통 해 그림 을 가 져 왔 습 니 다.그림 획득 에 성공 한 후 Picasso Drawable 을 통 해 Target 에 표 시 됩 니 다.
주의해 야 할 것 은 위의 Data 의 File system 부분 입 니 다.Picasso 는 로 컬 캐 시 인 터 페 이 스 를 사용자 정의 하지 않 았 습 니 다.기본적으로 http 의 로 컬 캐 시 를 사용 하고 API 9 이상 은 okhttp 를 사용 하 며 아래 는 Urlconnection 을 사용 하기 때문에 로 컬 캐 시 를 사용자 정의 하려 면 Downloader 를 다시 정의 해 야 합 니 다.
2.피 카 소의 장점
(1)자체 통계 모니터링 기능
캐 시 명중률,사용 한 메모리 크기,절 약 된 데이터 등 이미지 캐 시 사용 모니터링 을 지원 합 니 다.
(2)우선 순위 처리 지원
매번 작업 스케줄 링 전에 우선 순위 가 높 은 작업 을 선택 합 니 다.예 를 들 어 App 페이지 에서 Banner 의 우선 순위 가 Icon 보다 높 을 때 적 용 됩 니 다.
(3)그림 크기 계산 완료 로 딩 지연 지원
(4)비행 모드 지원,병렬 스 레 드 수 는 네트워크 유형 에 따라 달라 집 니 다.
휴대 전화 가 비행 모드 나 네트워크 유형 으로 전환 할 때 스 레 드 탱크 의 최대 병발 수 를 자동 으로 조정 합 니 다.예 를 들 어 와 이 파이 의 최대 병발 수 는 4,4g 는 3,3g 은 2 입 니 다.
여기 서 Picasso 는 CPU 핵 이 아 닌 네트워크 유형 에 따라 최대 병발 수 를 결정 합 니 다. 
(5)"없 음"로 컬 캐 시
'로 컬 캐 시'가 없 는 것 은 로 컬 캐 시가 없 는 것 이 아니 라 Picasso 자신 이 실현 하지 못 한 것 입 니 다.Square 의 다른 네트워크 라 이브 러 리 okhttp 에 맡 겼 습 니 다.이러한 장점 은 Response Header 의 Cache-Control 과 Expired 를 통 해 그림 의 만 료 시간 을 제어 할 수 있 습 니 다.
6.글 라 이 드 디자인 및 장점

1.전체적인 디자인 과 절차
위 는 글 라 이 드 의 전체적인 설계도 입 니 다.전체 라 이브 러 리 는 RequestManager(요청 관리자),Engine(데이터 취득 엔진),Fetcher(데이터 취득 기),Memory Cache(메모리 캐 시),DiskLRUCache,Transformation(이미지 처리),Encoder(로 컬 캐 시 저장 소),Registry(이미지 클래스 및 해석 기 설정),Target(대상)등 모듈 로 나 뉜 다.
쉽게 말 하면 Glide 는 자원 을 불 러 오고 표시 하 는 작업 을 받 았 습 니 다.Request 를 만 들 고 Request Manager 에 게 건 네 주 었 습 니 다.Request 는 Engine 을 시작 하여 데이터 원본 으로 자원 을 가 져 왔 습 니 다(Fetcher 를 통 해).가 져 온 후 Transformation 처 리 를 통 해 Target 에 게 건 네 주 었 습 니 다.
Glide 는 DiskLRUCache,GifDecoder 등 오픈 소스 라 이브 러 리 에 의존 하여 로 컬 캐 시 와 Gif 이미지 디 코딩 작업 을 수행 합 니 다.
2.글 라 이 드 의 장점
(1)이미지 캐 시->미디어 캐 시
Glide 는 그림 캐 시 뿐만 아니 라 Gif,WebP,미리 보기 그림 을 지원 합 니 다.심지어 비디오 이기 때문에 미디어 캐 시 로 삼 아야 한다. 
(2)우선 순위 처리 지원
(3)Activity/Fragment 수명 주기 와 일치 하 며 trimMemory 지원
Glide 는 모든 context 에 RequestManager 를 유지 하고 Fragment Transaction 을 통 해 Activity/Fragment 수명 주기 와 일치 하 며 해당 하 는 trimMemory 인터페이스 가 있어 호출 이 가능 합 니 다.
(4)okhttp,Volley 지원
Glide 는 기본적으로 UrlConnection 을 통 해 데 이 터 를 가 져 옵 니 다.okhttp 이나 Volley 와 함께 사용 할 수 있 습 니 다.실제 ImageLoader,Picasso 도 okhttp,Volley 를 지원 합 니 다.
(5)메모리 우호
① Glide 의 메모리 캐 시 에는 active 디자인 이 있 습 니 다.
메모리 캐 시 에서 데 이 터 를 가 져 올 때 일반적인 구현 용 get 이 아 닌 reove 를 사용 하여 이 캐 시 데 이 터 를 부 드 러 운 인용 activeResources map 에 넣 고 인용 수 를 계산 하여 그림 로 딩 이 끝 난 후에 판단 합 니 다.인용 계수 가 비어 있 으 면 회수 합 니 다.
② 메모리 캐 시 작은 그림
Glide 이 url,viewwidth、view_height,화면의 해상도 등 을 결합 키 로 하여 처리 한 그림 캐 시 를 메모리 캐 시 에 저장 합 니 다.원본 그림 이 아 닌 크기 를 절약 합 니 다.
③ Activity/Fragment 수명 주기 와 일치 하 며 trimMemory 지원
④ 이미지 기본 사용 기본 RGB565 ARGB 가 아 닌888
선명 도 는 떨 어 지지 만 그림 이 더 작 아 ARGB 로 설정 할 수 있 습 니 다.888。
기타:Glide 는 signature 를 통 해 로 컬 캐 시 를 사용 하지 않 거나 url 만 료 를 지원 할 수 있 습 니 다.
모으다

세 가 지 는 전체적으로 ImageLoader 의 기능 과 대리 가 이해 하기 쉬 운 길이 가 모두 일반적이다. 
Picasso 코드 는 한 가방 에 만 있 고 엄격 한 가방 구분 이 없 지만 코드 가 간단 하고 논리 가 뚜렷 해서 한두 시간 이면 깊이 있 게 이해 할 수 있 습 니 다.
Glide 기능 은 강하 지만 코드 의 양 이 많 고 유통 이 복잡 합 니 다.문제 가 해결 되 기 어렵 지 않도록 비교적 깊이 파악 한 상태 에서 만 추천 합 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기