【问题标题】:Killing application Picasso reloads the images everywhere in application in android杀死应用程序毕加索在android中的应用程序中重新加载图像
【发布时间】:2016-12-31 09:26:43
【问题描述】:

我已经实现了 Picasso 库来加载图像。在我们终止应用程序之前,图像缓存运行良好。如果应用程序被杀死 Picasso 再次加载图像,则不会缓存。这是这个库中的一个众所周知的错误,因为我在各种博客中读过它,在某处我读到更新毕加索库解决了这个问题,我做了同样的事情,但它仍然存在。现在我正在使用 Picasso Version2.5.2。如果有人对毕加索有很好的体验,请告诉我一些事情。

毕加索的最新版本是什么? 这个问题在最新版本的毕加索中仍然存在吗? 有没有棘手的解决方案? 我需要使用哪个库来解决这个问题?

提前致谢。

【问题讨论】:

  • 我的建议是使用glide

标签: java android caching picasso image-loading


【解决方案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 缓存语义进行缓存控制)。因此,您寻求的行为是免费的

【讨论】:

    【解决方案2】:

    这就是我如何实现 Picasso 以强制它在再次在线获取图像之前先查找缓存记录。请注意,该库有 65MB 的缓存限制。请阅读文档中的某处

     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);
    
                                            }
                                        });
                            }
                        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-23
      • 1970-01-01
      • 2015-12-17
      • 1970-01-01
      • 2016-06-27
      • 2015-04-23
      • 2013-09-02
      相关资源
      最近更新 更多