您的位置:首页 > 移动开发 > Android开发

android进阶篇一、Bitmap内存管理及各版本区别

2015-03-07 20:56 211 查看
对于android内存管理上,最重要的还是Bitmap内存的使用,以前对于Bitmap的内存总是一知半解状态,只是知道需要调用recyle()最安全。今天对于内存的管理做一个总结。

Android内存回收机制

在Android2.2(API
8)以及更低的版本中,当发生垃圾回收时,你的应用线程会停止。这会导致延迟,使得性能降低。Android2.3添加了并发垃圾收集,这意为着一个bitmap不再被引用的时候,内存很快就被回收。

Android的bitmap内存管理演化

在Android2.3.3(API 10)和更低的版本中,bitmap的像素数据是存储在native内存中的,它独立于bitmap本身,bitmap是存储在Dalvik堆中的。

在native内存中的bitmap的像素数据不会在一个可预测的行为之释放,潜在的导致应用内存超过限制并且崩溃。在android3.0(API 11)中,bitmap的像素数据存储在Dalvik堆中于bitmap相关联

优化bitmap内存管理

在android2.3.3以及更低的版本中,建议使用recycle()(释放native的内存),如果你在你的应用中大量的显示bitmap数据,你很可能得到OutOfMemoryError错误,recycle()方法允许一个应用尽快回收内存

在android3.0以及更高的版本中,Android3.0(API 11)引入了BitmapFactory.Options.inBitmap,如果设置了这个选项,当加载内容的时候,使用Options对象的解码方法将会尝试复用一个存在的bitmap这意为着bitmap的内存被复用了,导致性能提升,并且无须分配与重新分配内存使inBitmap有一些需要注意的地方:重用的bitmap必须与源内容尺寸一致(保证相同的内存被使用),并且是JPEG或者PNG格式(作为resource或者stream)

关于Bitmap在各个版本之间如何使用,官方bitmapfun给了一个很玩这个的例子,大家可以去学习一下。

关于android的一些难题在android官方文档中基本都能找到很好的答案,希望大家重视,大家一起学习!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: