2016-08-24 77 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缓存语义进行缓存控制)。正因为如此,你寻求的行为来免费