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官方文档中基本都能找到很好的答案,希望大家重视,大家一起学习!
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官方文档中基本都能找到很好的答案,希望大家重视,大家一起学习!
相关文章推荐
- Android Drawable、Bitmap、Canvas和Paint的区别
- Android各个版本API的区别
- Android 中编译版本,最小版本, 目标版本都有什么区别?
- 关于转屏禁止onCreate android 3.0版本之前和之后的区别
- android 关于Bitmap对象于内存管理
- Android setImageResource、setImageBitmap、setImageDrawable区别
- Android中的2D引擎skia之 -- SkBitmap的内存管理分析
- Android各个版本API的区别
- Android Bitmap 与 Drawable之间的区别和转换
- Android性能优化:谈谈Bitmap的内存管理与优化
- Android *** Drawable、Bitmap、Canvas、Paint之间区别
- Android Bitmap 与 Drawable之间的区别和转换
- android代码混淆之不同ADT版本和不同IDE之间混淆配置文件的区别
- 最新历史版本 :Android Bitmap和Canvas