1

picasso を使用してアプリの画像を読み込みます。特に大きなものはありませんが、メモリにキャッシュするのはこれまでだけなので、画像の重いページでメモリ不足エラーが発生しています。ディスク キャッシュを有効にするために picasso またはエミュレータで手動で設定する必要があるものはありますか?

4

2 に答える 2

2

カスタム ダウンローダーを Picasso に提供しましたか? 確認すべき点がいくつかあります。

  1. 指定したキャッシュ フォルダへの書き込み権限はありますか?
  2. キャッシュ サイズの制限は、ピカソがダウンロードする画像に対して十分な大きさですか?

以下は、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 ヘッダーをサーバーが返している可能性もあります。テストのために、私は提案します:

  1. ピカソのsetDebugging(true); を有効にします。イメージがディスクからリロードされると、黄色のマーカーが表示されます。
  2. キャッシュをテストするときにアプリケーションを強制終了します。緑色のマーカーは、メモリ キャッシュからのものであることを示します。
  3. サーバーが 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 に答える