【发布时间】:2013-12-04 02:39:19
【问题描述】:
我在我的项目中使用了流行的毕加索,但我已经转储了堆,它看起来像这样。现在昨天它给了我 48M 用于毕加索中使用的LruCache。
如何指定它的大小?
注意:我加载的图像显然很大。
如果有人提出fit() 或centerCrop(),我听说这些功能会减小图像大小,对吗?但有时我必须在ListView 中以全视图显示小图像。
现在,这些函数会缓存缩小的图像吗?
【问题讨论】:
我在我的项目中使用了流行的毕加索,但我已经转储了堆,它看起来像这样。现在昨天它给了我 48M 用于毕加索中使用的LruCache。
如何指定它的大小?
注意:我加载的图像显然很大。
如果有人提出fit() 或centerCrop(),我听说这些功能会减小图像大小,对吗?但有时我必须在ListView 中以全视图显示小图像。
现在,这些函数会缓存缩小的图像吗?
【问题讨论】:
以下代码会将毕加索缓存大小增加到 250 MB。
Picasso picasso = new Picasso.Builder(this).downloader(new OkHttpDownloader(getCacheDir(), 250000000)).build();
Picasso.setSingletonInstance(picasso);
【讨论】:
默认情况下,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 来释放空间。
【讨论】:
get() 中进行磁盘访问。