【问题标题】:Android Picasso Configure LruCache SizeAndroid Picasso 配置 LruCache 大小
【发布时间】:2013-12-04 02:39:19
【问题描述】:

我在我的项目中使用了流行的毕加索,但我已经转储了堆,它看起来像这样。现在昨天它给了我 48M 用于毕加索中使用的LruCache。

如何指定它的大小?

注意:我加载的图像显然很大。

如果有人提出fit() 或centerCrop(),我听说这些功能会减小图像大小,对吗?但有时我必须在ListView 中以全视图显示小图像。

现在,这些函数会缓存缩小的图像吗?

【问题讨论】:

    标签: android picasso


    【解决方案1】:

    以下代码会将毕加索缓存大小增加到 250 MB。

    Picasso picasso =  new Picasso.Builder(this).downloader(new OkHttpDownloader(getCacheDir(), 250000000)).build();
    Picasso.setSingletonInstance(picasso);
    

    【讨论】:

      【解决方案2】:

      默认情况下,Picasso 将 1/7 的可用堆用于其 LRU。这是一个“快乐”的部分,在所有设备上运行得最好。

      您可以通过将自定义实例传递给Picasso.Builder 来配置内存缓存的大小。它可以是LruCache 的一个实例,它采用最大大小或Cache 的任何其他实例。

      Picasso p = new Picasso.Builder(context)
          .memoryCache(new LruCache(24000))
          .build();
      

      不过,在缩小此缓存大小之前,请记住将Bitmap 实例保留在 RAM 中可以让它们立即显示出来。未使用的 RAM 是浪费的 RAM。内存缓存应该使用尽可能多的 RAM,而不会导致 OOM(显然)或不必要的 GC 来释放空间。

      【讨论】:

      • 嗨,Jake 先生,我目前正在处理的应用程序主要基于图像处理,因此它需要大量的内存堆。但是现在使用 picasso 和默认缓存计算,覆盖 15% 的可用内存,我实际上内存不足。那么我可以在毕加索中使用github.com/JakeWharton/DiskLruCache 进行磁盘缓存吗?有什么例子或提示吗?
      • 实际上我的要求是访问 SD 卡中的所有完整图像并应用自定义转换来生成需要缓存在 SD 卡而不是内存中的缩略图图像。但现在根本没有问题,因为不知何故我能够在 LRUCache.java 文件中实现 DiskLruCache 并且它也在工作。谢谢:)
      • 在主线程上查询LRU缓存。我希望您没有在get() 中进行磁盘访问。
      • @JakeWharton 你说 1/7 的堆是为 LruCache 保留的,但是在内存报告中 LruCache 实例使用了 40% 以上。我从 MAT 得到了类似的结果;你对此有什么解释吗?
      • 这 40% 以上是由于应用程序本身的泄漏或毕加索的 LRUCache 被保留在我猜的某个地方
      猜你喜欢
      • 1970-01-01
      • 2020-08-28
      • 1970-01-01
      • 1970-01-01
      • 2014-01-07
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多