对于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:仅仅是提醒,不会立即执行
}
以上就是小编浅显的关于内存溢出的一些看法!