我一直在浏览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设备版本管理相同的?
请帮助我并提出相同的最佳技术。
答案 0 :(得分:1)
即使该文件没有提到这一点。我们不处理缓存或回收位图的开销它是通过使用第三方[可信和广泛使用的]工具(如毕加索或滑翔或通用图像加载器)来处理的。请阅读这个很好的知识,但很多应用程序使用这些
答案 1 :(得分:0)
这取决于你在显示位图时使用的是什么?如果您使用的是诸如凌空,毕加索,通用图像加载器等库,那么他们就会以良好的方式处理。如果您没有使用这些库,则HttpResponseCache
。但说实话,我从未测试过Bitmaps
答案 2 :(得分:0)
关于参考资料
SoftReference 应该尽快清除并加入队列,也就是说,万一VM存在内存不足的危险。
一旦知道弱引用, WeakReference 就会被清除并加入队列。
检查this了解更多
使用LRU Cache:为什么它是首选,简单的答案是因为它是android的一部分。它最好使用LRU缓存作为Android最佳实践的一部分。
关于版本控制:它不依赖于Android版本(略低于2.3)。但这取决于设备(LRU缓存的大小不同)。
使用此计算来查找每个设备的大小。 (Android正式建议这个)
int memoryClass= ( ( ActivityManager )context.getSystemService( Context.ACTIVITY_SERVICE ) ).getMemoryClass();
int cacheSize = 1024 * 1024 * memoryClass/ 8;