内存泄漏和溢出

图片的内存不足 内存溢出
可能是你加载的当前的图片占用内存大于当前剩余内存,解决方法就是及时释放内存,不显
示的图片要释放掉。也可能是你加载的图片是空的,导致内存不足。android系统给图片分
配的内存只有8M,当加载大量图片时往往会出现OOM。
Android加载大量图片内存溢出解决方案:
1)尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来
设置一张大图,因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成
的,需要消耗更多内存,可以通过BitmapFactory.decodeStream方法,创建出一个bitmap,
再将其设为ImageView的 source
2)使用BitmapFactory.Options对图片进行压缩
InputStream is = this.getResources().openRawResource(R.drawable.pic1);
BitmapFactory.Options options=new BitmapFactory.Options();
options.inJustDecodeBounds = false;
options.inSampleSize = 10; //width,hight设为原来的十分一
Bitmap btp =BitmapFactory.decodeStream(is,null,options);
3)运用Java软引用,进行图片缓存,将需要经常加载的图片放进缓存里,避免反复加载
及时销毁不再使用的Bitmap对象
if(!bmp.isRecycle() ){
bmp.recycle() //回收图片所占的内存
system.gc() //提醒系统及时回收
}
内存泄漏:也称作“存储渗漏”,用动态存储分配函数动态开辟的空间,在使用完毕后未释
放,结果导致一直占据该内存单元。
Handler在发送延时消息时会产生“内存泄漏”,在进行屏幕旋转的时候,activity会
被销毁,然后再重建,再切屏(横竖屏切换),结果就会出现内存泄漏。
内存泄漏分析:在切屏时,activity想要销毁,重建,那么Handler就也需要销毁,其
条件就是不能有任务或者Message,由于Handler中很有可能有任务要执行(是因为发送的是
延时任务),所以Handler就不能被销毁,它持有activity的引用,导致Activity销毁失
败。
解决办法:只需要在onDestroy()方法内加一条代码,就是handler内的所有任务和消
息都销毁清空即可。
handler.removeCallbackAndMdssage(null) 调用之后就不会出现内存泄漏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值