Bitmap优化,cacheasbitmap
上一篇文章(http://blog..net/a345017062/article/details/8753649)提到了两种位图缓存。本文将讨论如何确定具体的位图缓存策略。
首先,为了更快地理解我们的策略,我们需要谈谈不同版本的Android系统是如何处理位图的。
1.在Android 2.2 (API level 8),以及更早的版本中,一旦GC开始运行,App的线程就会停止工作,所以App的性能会下降。从Android 2.3 (API level 9)开始,增加了并发GC,也就是说一旦图像没有被引用,就可以快速回收。
2.在Android 2.3.3 (API level 10)及更早的版本中,位图的像素数据存储在原生内存中,而位图对象在Dalvikheap中。因此,如何回收位图像素数据是未知的,这可能会导致内存泄漏,从而导致崩溃。在Android 3.0 (API Level11)及以后的版本中,像素数据像位图对象一样存储在Dalvik堆中。
接下来,我们来谈谈如何针对不同版本的Android系统优化位图的内存管理。
在Android 2.3.3 (API level 10)及更早的版本中,建议使用Bitmap.recycle方法来加快位图内存的回收。
从Android 3.0(API 11级)开始,BitmapFactory。引入了Options.inBitmap。如果设置了该域,该域引用的位图将在解码过程中重复使用,以避免内存重新分配。但是在使用该字段时,需要注意一些事项:
1.重新使用的位图和要解码的位图必须大小相同,并且为JPEG或PNG格式。
2.bitmap factory . options . inpreferredconfig字段的设置无效,因为它将被重用位图的配置覆盖。
3.一定要使用解码方法返回的位图,因为重用可能会失败。
另外,在Android 3.0 (API Level 11),及以上版本中,当位图被挤出LruCache时,我们可以保存这个位图的softreference,在后期解码时作为inBitmap使用。
本文翻译自:http://developer . Android . com/training/displaying-bitmaps/manage-memory . html
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。