标签:
Bitmap优化
Bitmap非常消耗内存,而且在Android中,读取bitmap时, 一般分配给虚拟机的图片堆栈只有8M,所以经常造成OOM问题。所以有必要针对Bitmap的使用作出优化:
Bitmap.recycle()
回收。
问题:Android不是自身具备垃圾回收机制吗?此处为何要手动回收。
Bitmap对象不是new生成的,而是通过BitmapFactory生产的。而且通过源码可发现是通过调用JNI生成Bitmap对象
(nativeDecodeStream()等方法
)。所以,加载bitmap到内存里包括两部分,Dalvik内存
和Linux kernel内存
。前者会被虚拟机自动回收。而后者必须通过recycle()
方法,内部调用nativeRecycle()
让linux kernel回收。
内存缓存
、硬盘缓存
等BitMapFactory.Options
对图片进行压缩。ARGB_8888
,显示质量最高,占用内存最大。若要求不高时可采用RGB_565
等模式。图片大小:图片长度*宽度*单位像素所占据字节数
对象引用类型
强引用 strong
:Object object=new Object()
。当内存不足时,Java虚拟机宁愿抛出OOM内存溢出异常,也不会轻易回收强引用对象来解决内存不足问题;软引用 soft
:只有当内存达到某个阈值时才会去回收,常用于缓存
;弱引用 weak
:只要被GC线程扫描到了就进行回收;虚引用
避免OOM
发生,则使用软引用
对象,即当内存快不足时进行回收
;如果想尽快回收某些占用内存较大的对象
,例如bitmap,可以使用弱引用
,能被快速回收。不过如果要对bitmap作缓存就不要使用弱引用,因为很快就会被GC回收,导致缓存失败
。关于java对象引用类型,具体可参加本人另一篇文章
池 pool
缓存
关于android缓存机制,具体可参加本人另一篇文章
标签:
原文地址:http://www.cnblogs.com/zrui513/p/4889703.html