2016-08-24 75 views
1

我已經實現了加載圖像的畢加索庫。圖像緩存工作完美,直到我們殺死應用程序。如果應用程序被殺死畢加索再次加載圖像,則不進行緩存。這是該庫中一個衆所周知的錯誤,因爲我在各種博客中讀過它,在某處我讀到更新畢加索圖書館解決了這個問題,我也這樣做了,但它仍然存在。現在我正在使用畢加索版本2.5.2。如果有人對畢加索有很好的體驗,請讓我知道一些事情。殺死應用程序畢加索重新加載應用程序中的圖像無處不在android

什麼是畢加索的最新版本? 這個問題在畢加索最新版本中還存在嗎? 有這個棘手的解決方案嗎? 我需要用哪個庫來克服這個問題?

在此先感謝。

+0

我的建議是使用[滑翔](https://github.com/bumptech/glide) – mayosk

回答

0

這是我如何實現畢加索,迫使它尋找緩存記錄第一個網上獲取圖像again..Due注意,庫​​具有65MB緩存limit..read之前,該文件在某處

Picasso.with(context) 
        .load(Link) 
        .placeholder(R.drawable.grad) 
        .error(R.drawable.grad) 
        .networkPolicy(NetworkPolicy.OFFLINE) 
        .fit() 
        .centerCrop() 
        .into(image, new Callback() { 
         @Override 
         public void onSuccess() { 
          //successfully loads from CACHE 
          image.setClickable(true); 
          .............. 
         } 

         @Override 
         public void onError() { 
          // fetch online because cache is not there 
          Picasso.with(context) 
            .load(Link) 
            .fetch(new Callback() { 
             @Override 
             public void onSuccess() { 
              Picasso.with(context) 
                .load(Link) 
                .fit() 
                .centerCrop() 
                .into(image, new com.squareup.picasso.Callback() { 
                 @Override 
                 public void onSuccess() { 

                 //success.. 
                 } 

                 @Override 
                 public void onError() { 
                  Toast.makeText(context, "No Image Found. Try again later", Toast.LENGTH_SHORT).show(); 
                  image.setClickable(false); 

                 } 
                }); 
             } 

             @Override 
             public void onError() { 
              //NO IMAGE offline or online 
              Toast.makeText(context, "No Image Found. Try again later", Toast.LENGTH_SHORT).show(); 
              image.setClickable(false); 

             } 
            }); 
         } 
        }); 
1

對於被殺後的應用程序加載圖像,你應該按照說明:

  1. 服務器應與頭Cache-Control
    Cache-Control:public, max-age=604800
    返回圖像更多信息:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
  2. 您應該創建自己的畢加索例如:
    Cache cache = new Cache(context.getCacheDir(), 30000000); OkHttpClient client = new OkHttpClient.Builder().cache(cache).build(); OkHttp3Downloader downloader = new OkHttp3Downloader(client); Picasso picasso = new Picasso.Builder(appContext).downloader(downloader).build();
  3. 加載圖像:picasso.load(url).into(imageView);

釋:

畢加索沒有一個磁盤緩存。它委託給您用於該功能的任何HTTP客戶端(依靠HTTP緩存語義進行緩存控制)。正因爲如此,你尋求的行爲來免費