2013-03-25 1 views
0

위 작업을 수행 할 수 있습니까?캐시 전략 : LimitedAgeMemoryCache에서로드하고, 그렇지 않으면 웹에서로드하십시오. 실패하면 UnlimitedDiscCache로 돌아갑니다.

내 시나리오는 기본 이미지가 실제로 변경되는 동안 URL이 동일하게 유지되는 날씨 그래픽입니다. 다음은 내가 다루고 싶은 경우입니다. - 내 앱의 동일한 세션 (일반적으로 2-5 분) 동안 웹에서 이미지를 다시로드하고 싶지 않습니다. - 15 분 정도 지나면 이미지가 변경되었을 가능성이 높습니다. 따라서 캐시 된 버전이 있더라도이를 덤프하고 싶습니다. - 오프라인 일 때 이미지를 새로 고치려고 할 때 이전 이미지를 포함한 모든 이미지가 이미지가없는 것보다 낫습니다. 따라서 디스크 캐시에서 표시하려고합니다.

이 설정이 가능합니까? UIL로 가능하다면 즉시 명백하게 보이지 않았다.

멋진 라이브러리를 보내 주셔서 감사합니다.

답변

2

나는이 당신을 위해 솔루션 생각 :

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로 검색하십시오. 그런 다음 네트워크에서 이미지를 다운로드합니다.

"제한된 나이"메모리 캐시 또는 디스크 캐시를 사용하는 경우 비트 맵 또는 이미지 파일은 시간 초과 후 캐시에서 삭제됩니다 (실제로 캐시에서 검색 중에 삭제됩니다). 논리는 다음입니다 : 메모리 캐시에

  1. 검색 비트 맵
    • 필요한 비트 맵
      • 비트 맵으로 이동, 전
        • 는 메모리 캐시에서 삭제 지정된 시간보다 더 많은 캐시가 추가 된 것입니다 2 단계
      • 비트 맵이 최근에 캐시에 추가되었습니다.
        • 비트 맵을 가져 와서 표시하십시오. 종료.
    • 더 캐시 비트 맵, 디스크 캐시에
      • 필요한 이미지를 2
    • 검색 이미지 파일을 단계로 이동 필요가
      • 이미지가보다 더 많은 캐시가 추가되었습니다 없습니다 지정된 시간 전에
        • 디스크 캐시에서 삭제, 3 단계로 이동
      • 화상을 표시하는 비트 맵으로 최근
        • 복호 화상을 캐시에 추가 하였다. 종료.캐시에
    • 없이 필요한 이미지,

가 (디스플레이 옵션에서 DisplayImageOptions)를 캐싱을 사용 잊지 마세요 3

  • 다운로드 이미지를 단계로 이동합니다.

  • +0

    이 답변을 주셔서 감사합니다. 몇 가지 설명을 제공해 주시겠습니까? 메모리 캐시가 디스크 캐시로 대체됩니까? 네트워크는 언제 사용 되나요? 질문에서 언급했듯이, 첫 번째 시도는 메모리 (시간 제한) 캐시에있는 경우를 제외하고 네트워크를 통해 이루어져야합니다. 네트워크가 실패하고 메모리 캐시에없는 경우 디스크 캐시로 되돌아갑니다. 감사! – RealCasually

    +0

    @DerekJohnson 답변에 대한 설명이 추가되었습니다. – NOSTRA

    +0

    좋은 설명 주셔서 감사합니다. 네트워크에 장애가 발생하고 디스크 캐시가 메모리 캐시에 없다고 가정하면 디스크 캐시에서로드하기를 원하므로이 문제는 해결되지 않습니다. 어떻게 순서를 바꿀 수 있습니까? 메모리 -> 네트워크 -> 디스크? – RealCasually

    관련 문제