android防止oom方法,android防止OOM的简单总结

1.在设置图片时的方法

//设置资源图片时,尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存。

public static Bitmap readBitMap(Context context, int resId){

BitmapFactory.Options opt = new BitmapFactory.Options();

opt.inPreferredConfig = Bitmap.Config.RGB_565;

opt.inPurgeable = true;

opt.inInputShareable = true;

//获取资源图片 InputStream is = context.getResources().openRawResource(resId);

return BitmapFactory.decodeStream(is,null,opt);

}

2、动态回收内存算是最简单的解决方法吧,就是手动的调用System.gc();

bitmap.recycle()方法用于回收该bitmap所占用的内存,用System.gc()调用一下系统的垃圾回收器。

if (bitmap != null && !bitmap .isRecycled()) {

bitmap .recycle();

bitmap = null;

}

System.gc();

3.压缩图片的展示

//压缩,用于节省BITMAP内存空间--解决BUG的关键步骤

BitmapFactory.Options opts = new BitmapFactory.Options();

opts.inSampleSize = 2;//这个的值压缩的倍数(2的整数倍),数值越小,压缩率越小,图片越清晰

//返回原图解码之后的bitmap对象

Bitmap bitmap = BitmapFactory.decodeResource(getResources(),

R.drawable.begin_background, opts);

4.在Activity里在结束时一定要关闭现场

(1)总结一下避免Context泄漏应该注意的问题:

(2)尽量使用Application这种Context类型。

(3)注意对Context的引用不要超过它本身的生命周期。

(4)慎重的对Context使用“static”关键字。

(5)Context里如果有线程,一定要在onDestroy()里及时停掉

5.集合的处理

我们通常把一些对象的引用加入到了集合中,当我们不需要该对象时,并没有把它的引用从集合中清理掉,这样这个集合就会越来越大。如果这个集合是static的话,那情况就更严重了。

6.android的程序对象

些Android程序可能引用我们的Anroid程序的对象(比如注册机制)。即使我们的Android程序已经结束了,但是别的引用程序仍然还有对我们的Android程序的某个对象的引用,泄漏的内存依然不能被垃圾回收。调用registerReceiver后未调用unregisterReceiver。

虽然有些系统程序,它本身好像是可以自动取消注册的(当然不及时),但是我们还是应该在我们的程序中明确的取消注册,程序结束时应该把所有的注册都取消掉

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值