最佳内存缓存技术

时间:2015-10-08 11:42:47

标签: android caching bitmap

我一直在浏览Displaying Bitmaps Efficiently的Android开发者网站。

但我对下面的语句感到困惑,需要建议一个良好的内存缓存技术。以下是链接。

http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html

  

注意:过去,流行的内存缓存实现是一个   SoftReference或WeakReference位图缓存,但事实并非如此   推荐的。从Android 2.3(API Level 9)开始垃圾   收集器更积极地收集软/弱引用   这使他们相当无效。此外,在Android 3.0之前   (API级别11),位图的后备数据存储在本机中   可能以可预测的方式释放的内存   导致应用程序短暂超出其内存限制并崩溃。

所以是LRU Cache,比弱参考/软参考最好的技术,为什么会这样?另外如何为不同的Android设备版本管理相同的?

请帮助我并提出相同的最佳技术。

3 个答案:

答案 0 :(得分:1)

即使该文件没有提到这一点。我们不处理缓存或回收位图的开销它是通过使用第三方[可信和广泛使用的]工具(如毕加索或滑翔或通用图像加载器)来处理的。请阅读这个很好的知识,但很多应用程序使用这些

答案 1 :(得分:0)

这取决于你在显示位图时使用的是什么?如果您使用的是诸如凌空,毕加索,通用图像加载器等库,那么他们就会以良好的方式处理。如果您没有使用这些库,则HttpResponseCache。但说实话,我从未测试过Bitmaps

答案 2 :(得分:0)

关于参考资料

SoftReference 应该尽快清除并加入队列,也就是说,万一VM存在内存不足的危险。

一旦知道弱引用, WeakReference 就会被清除并加入队列。

检查this了解更多

使用LRU Cache:为什么它是首选,简单的答案是因为它是android的一部分。它最好使用LRU缓存作为Android最佳实践的一部分。

选中此Android best practices

关于版本控制:它不依赖于Android版本(略低于2.3)。但这取决于设备(LRU缓存的大小不同)。

使用此计算来查找每个设备的大小。 (Android正式建议这个)

int memoryClass= ( ( ActivityManager )context.getSystemService( Context.ACTIVITY_SERVICE ) ).getMemoryClass();
int cacheSize = 1024 * 1024 * memoryClass/ 8;