Glide中的MemoryCacheSize和BitmapPoolSize有什么区别

时间:2017-12-04 16:30:55

标签: android android-glide

我对MemorySizeCalculator的{​​{1}}感到好奇。我可以从Glide获取默认内存缓存大小,从getMemoryCacheSize()获取位图池大小。

MemorySizeCalculator

getBitmapPoolSize()

我也理解了内存缓存概念但不确定位图池的大小,所以我从这个链接中找到了一些信息:https://medium.com/@ali.muzaffar/performance-improvement-and-bitmap-pooling-in-android-f97b380cf965

  

位图池是一种简单的技术(虽然相当复杂   实现),旨在重用位图而不是创建新的位图   每次。简单地说,当你需要一个位图时,你检查一下   位图堆栈,以查看是否有可用的位图。如果有   没有位图可用你创建一个新的位图,否则你弹出一个   堆栈中的位图并重用它。然后,当你完成了   位图,你可以把它放在堆栈上。

我认为推送到堆栈的位图也缓存在内存中。有没有人可以帮助我理解这个概念?

2 个答案:

答案 0 :(得分:1)

  1. 位图池缓存位图,用于节省创建时间 位图。因为我们不能承诺所有缓存的位图 的MemoryCache。
  2. 之前使用的memoryCache缓存位图。

答案 1 :(得分:0)

图像繁重的应用程序必须解码许多图像,因此应用程序中将存在连续的内存分配和释放。这导致频繁调用垃圾收集器(GC)。如果你多次调用GC,你的应用程序UI会冻结。 Glide使用位图池概念有效地加载图像。通过使用Bitmap池来避免应用程序中的内存连续分配和释放,可以减少GC开销,从而使应用程序平稳运行。

基本原则很简单。处理位图时,您必须验证位图2是否与位图1相同。为此,您必须比较它们。如果是这种情况,您可以将位图1作为inbitmap重用,以重复使用相同的内存空间来处理gitmap 2,然后滑动GC。

内存缓存是分配给每个应用程序的内存空间。一个应用程序无法访问其他应用程序的缓存内存。它的大小有限。