2013-09-03 6 views
1

내 응용 프로그램의 이미지를로드하는 데 picasso를 사용하고 있습니다. 특별히 큰 것은 없지만 메모리에 캐싱 만하면 이미지가 많은 페이지에서 메모리 부족 오류가 발생합니다. 디스크 캐싱을 사용하기 위해 picasso 또는 에뮬레이터에서 수동으로 설정해야하는 항목이 있습니까?Picasso는 에뮬레이터에서 디스크에 캐시하지 않습니다.

+0

설명에서 디스크 캐싱에 대해 언급했지만 JavaDocs에서는 디스크 캐싱을 참조하지 않습니다. – CommonsWare

+0

유일한 메모리 캐싱 방법은 무엇입니까? 몇 개의 이미지를로드 한 후 비행기 모드를 사용해 보셨습니까? (프로세스 재시작). 또한 인스턴스에서 디버깅 (true)을 호출합니다. 또한, 다운로더는 무엇을 사용하고 있습니까? OkHttpDownloader 또는 UrlConnectionDownloader? 디스크 캐시를 설치할 수 없었을 수 있습니다. – dnkoutso

+0

디버깅을 설정했기 때문에 메모리에 캐싱 중이라고 가정하고 (빨간색) 녹색 태그 만 보았습니다. 그러나 비행기 모드로 에뮬레이터를 설정하고 제안한대로 일부 이미지를로드 한 후 내 컴퓨터에서 wifi를 끄고 화면에서 벗어난 후 다시로드하면 빨간색 태그가 다시 나타납니다. 메모리에 캐싱하고 올바른 디버그 표시기를 표시하지 않는 것일 수도 있습니다. 확실하지 않은 다운 로더, 나는 sdk 14+를 목표로하고 있으므로 OkHttpDownloader를 가정합니까? – Igd

답변

2

Picasso에 맞춤식 다운로더를 제공 했습니까? 다음 사항을 확인해야하는 몇 가지 사항이 있습니다.

  1. 지정한 캐시 폴더에 쓰기 권한이 있습니까?
  2. Picasso가 다운로드하는 이미지에 캐시 크기 제한이 충분히 큽니까? 여기

은 SD 카드에 캐시 디렉토리에 이미지를 작성하기위한 예제 구현 :이 테스트를하지 않은

// Obtain the external cache directory 
File cacheDir = context.getExternalCacheDir(); 
if (cacheDir == null) { 
    // Fall back to using the internal cache directory 
    cacheDir = context().getCacheDir(); 
} 
// Create a response cache using the cache directory and size restriction 
HttpResponseCache responseCache = new HttpResponseCache(
     cacheDir, 
     10 * 1024 * 1024); 
// Prepare OkHttp 
httpClient = new OkHttpClient(); 
httpClient.setResponseCache(responseCache); 
// Build Picasso with this custom Downloader 
new Picasso.Builder(getContext()) 
     .downloader(new OkHttpDownloader(httpClient)) 
     .build(); 

뿐만 아니라, 서버가 반환 될 가능성이 존재한다 HTTP 헤더는 OkHttp가 캐시하지 못하도록 지시합니다. 테스트를 위해 다음과 같이 제안합니다.

  1. 피카소의 setDebugging(true)을 사용하도록 설정합니다. 이미지가 디스크에서 다시로드되면 노란색 표시가 나타납니다.
  2. 캐시를 테스트 할 때 응용 프로그램을 종료하십시오. 초록색 마커는 메모리 캐시에서 오는 것을 나타냅니다.
  3. 서버가 cache-expiry/no-pragma 헤더를 보내지 않는 정적 위치에서 이미지를 다운로드하십시오.
+0

나는이 코드를 가지고 있고 사진은 피카소의 캐시 디렉토리에 있지만 로그는 말한다 : 가 진행 READING_FROM_CACHE에게 어떤 생각 사용할 수 없거나 만료 또는 사용할 수 없습니다 캐시의 컨텐츠를 보내기? 미리 감사드립니다. – wendigo

0

에서 :.

How to implement my own disk cache with picasso library - Android?

//this code from https://developer.android.com/reference/android/net/http/HttpResponseCache.html 
try { 
     File httpCacheDir = new File(context.getCacheDir(), "http"); 
     long httpCacheSize = 10 * 1024 * 1024; // 10 MiB 
     HttpResponseCache.install(httpCacheDir, httpCacheSize); 
}catch (IOException e) { 
     Log.i(TAG, "HTTP response cache installation failed:" + e); 
} 

그리고 Picasso.with (는 getContext()) setDebugging (참)가 작동 중이 캐시를 확인하기 위해 디버깅을 활성화;