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:仅仅是提醒,不会立即执行

}

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


posted on 2015-10-12 20:28  小李博客  阅读(107)  评论(0编辑  收藏  举报

导航