나는이 당신을 위해 솔루션 생각 :
File cacheDir = StorageUtils.getCacheDirectory(context); // or any other folder
MemoryCacheAware<String, Bitmap> memoryCacheCore
= new LruMemoryCache(4 * 1024 * 1024); // or any other implementation
MemoryCacheAware<String, Bitmap> memoryCache
= new LimitedAgeMemoryCache<String, Bitmap>(memoryCacheCore, 15 * 60);
DiscCacheAware discCache = new LimitedAgeDiscCache(cacheDir, 15 * 60);
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
.memoryCache(memoryCache)
.discCache(discCache)
...
.build();
UPD : UIL은 항상 처음에 메모리 캐시에 필요한 이미지를 검색 할 수 있습니다. 그런 다음 디스크 캐시에서 UIL로 검색하십시오. 그런 다음 네트워크에서 이미지를 다운로드합니다.
"제한된 나이"메모리 캐시 또는 디스크 캐시를 사용하는 경우 비트 맵 또는 이미지 파일은 시간 초과 후 캐시에서 삭제됩니다 (실제로 캐시에서 검색 중에 삭제됩니다). 논리는 다음입니다 : 메모리 캐시에
- 검색 비트 맵
- 필요한 비트 맵
- 비트 맵으로 이동, 전
- 는 메모리 캐시에서 삭제 지정된 시간보다 더 많은 캐시가 추가 된 것입니다 2 단계
- 비트 맵이 최근에 캐시에 추가되었습니다.
- 더 캐시 비트 맵, 디스크 캐시에
- 검색 이미지 파일을 단계로 이동 필요가
- 이미지가보다 더 많은 캐시가 추가되었습니다 없습니다 지정된 시간 전에
- 화상을 표시하는 비트 맵으로 최근
- 복호 화상을 캐시에 추가 하였다. 종료.캐시에
- 없이 필요한 이미지,
가 (디스플레이 옵션에서 DisplayImageOptions
)를 캐싱을 사용 잊지 마세요 3
다운로드 이미지를 단계로 이동합니다.
이 답변을 주셔서 감사합니다. 몇 가지 설명을 제공해 주시겠습니까? 메모리 캐시가 디스크 캐시로 대체됩니까? 네트워크는 언제 사용 되나요? 질문에서 언급했듯이, 첫 번째 시도는 메모리 (시간 제한) 캐시에있는 경우를 제외하고 네트워크를 통해 이루어져야합니다. 네트워크가 실패하고 메모리 캐시에없는 경우 디스크 캐시로 되돌아갑니다. 감사! – RealCasually
@DerekJohnson 답변에 대한 설명이 추가되었습니다. – NOSTRA
좋은 설명 주셔서 감사합니다. 네트워크에 장애가 발생하고 디스크 캐시가 메모리 캐시에 없다고 가정하면 디스크 캐시에서로드하기를 원하므로이 문제는 해결되지 않습니다. 어떻게 순서를 바꿀 수 있습니까? 메모리 -> 네트워크 -> 디스크? – RealCasually