picasso を使用してアプリの画像を読み込みます。特に大きなものはありませんが、メモリにキャッシュするのはこれまでだけなので、画像の重いページでメモリ不足エラーが発生しています。ディスク キャッシュを有効にするために picasso またはエミュレータで手動で設定する必要があるものはありますか?
質問する
2933 次
2 に答える
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();
私はこれをテストしていませんが、OkHttp にキャッシュしないように指示する HTTP ヘッダーをサーバーが返している可能性もあります。テストのために、私は提案します:
- ピカソの
setDebugging(true)
; を有効にします。イメージがディスクからリロードされると、黄色のマーカーが表示されます。 - キャッシュをテストするときにアプリケーションを強制終了します。緑色のマーカーは、メモリ キャッシュからのものであることを示します。
- サーバーが cache-expiry/no-pragma ヘッダーを送信していないことが確実な静的な場所からイメージをダウンロードします。
于 2013-10-30T11:57:23.893 に答える
0
から:
picasso ライブラリで独自のディスク キャッシュを実装する方法 - 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(true);
于 2014-04-12T16:58:40.717 に答える