내 응용 프로그램의 이미지를로드하는 데 picasso를 사용하고 있습니다. 특별히 큰 것은 없지만 메모리에 캐싱 만하면 이미지가 많은 페이지에서 메모리 부족 오류가 발생합니다. 디스크 캐싱을 사용하기 위해 picasso 또는 에뮬레이터에서 수동으로 설정해야하는 항목이 있습니까?Picasso는 에뮬레이터에서 디스크에 캐시하지 않습니다.
1
A
답변
2
Picasso에 맞춤식 다운로더를 제공 했습니까? 다음 사항을 확인해야하는 몇 가지 사항이 있습니다.
- 지정한 캐시 폴더에 쓰기 권한이 있습니까?
- 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가 캐시하지 못하도록 지시합니다. 테스트를 위해 다음과 같이 제안합니다.
- 피카소의
setDebugging(true)
을 사용하도록 설정합니다. 이미지가 디스크에서 다시로드되면 노란색 표시가 나타납니다. - 캐시를 테스트 할 때 응용 프로그램을 종료하십시오. 초록색 마커는 메모리 캐시에서 오는 것을 나타냅니다.
- 서버가 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 (참)가 작동 중이 캐시를 확인하기 위해 디버깅을 활성화;
설명에서 디스크 캐싱에 대해 언급했지만 JavaDocs에서는 디스크 캐싱을 참조하지 않습니다. – CommonsWare
유일한 메모리 캐싱 방법은 무엇입니까? 몇 개의 이미지를로드 한 후 비행기 모드를 사용해 보셨습니까? (프로세스 재시작). 또한 인스턴스에서 디버깅 (true)을 호출합니다. 또한, 다운로더는 무엇을 사용하고 있습니까? OkHttpDownloader 또는 UrlConnectionDownloader? 디스크 캐시를 설치할 수 없었을 수 있습니다. – dnkoutso
디버깅을 설정했기 때문에 메모리에 캐싱 중이라고 가정하고 (빨간색) 녹색 태그 만 보았습니다. 그러나 비행기 모드로 에뮬레이터를 설정하고 제안한대로 일부 이미지를로드 한 후 내 컴퓨터에서 wifi를 끄고 화면에서 벗어난 후 다시로드하면 빨간색 태그가 다시 나타납니다. 메모리에 캐싱하고 올바른 디버그 표시기를 표시하지 않는 것일 수도 있습니다. 확실하지 않은 다운 로더, 나는 sdk 14+를 목표로하고 있으므로 OkHttpDownloader를 가정합니까? – Igd