[置顶]android 内存溢出的一些想法

对于android内存溢出这个问题,小编很是头痛!在这里说下小编自己的想法!

  首先内存引用分为强引用,弱引用,软引用,虚引用!

  强引用是一个实例引用,根据java的gc原理,如果存在引用,就无法自动回收,所以强引用必须在用完后使其=null

  ex:Object object = new Object();

     object = null;

  软引用是在强引用的基础上引用,使用Softreference进行引用,它是除非系统内存不足时才会回收,其它时候均不会回收,适合做cache;

  ex:

  Object object = new Object();

  SoftReference<Object>  objectSoft = new SoftReference<Object> (object);

  弱引用是可以随时获得某对象的信息,又不影响gc

  ex:  

   Object object = new Object();

  WeakReference<Object>  objectWeak = new WeakReference<Object> (object);

  虚引用就是没有的意思,建立虚引用之后通过get方法返回结果始终为null,虚引用通常会把引用的对象写进referent,只是get方法返回结果为null.

  Object object = new Object();

  PhantomReference<Object>  objectphantom = new PhantomReference<Object> (object,referenceQueue);(引用队列)

  在这里可以说明imagebitmap经常会出现内存溢出,不是手机内存不足,而是因为手机给应用分配的内存并不是所有内存,而是有限制,在这里一般将图片进行等比压缩。

  还有一个问题,android的应用层是使用java编写,而他的底层是由c编写,这就会造成一个问题,java有自动回收机制,而c语言没有。所以必要时需要手动催动回收机制!

  ex:

  if(bitmapObject.isRecycled()==false){

  bitmapObject.recycle();

  system.gc();//提醒系统及时回收,ps:仅仅是提醒,不会立即执行

}

  以上就是小编浅显的关于内存溢出的一些看法!


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值