内存泄漏

1、最常见的是handler的内存泄漏

handler属于TLS变量,生命周期与Activity的生命周期不一样,如果在handler中处理延时的操作,就有可能导致内存泄漏,由于Activity已经消失不见了,消息才处理完成,这就有可能造成无法正常的释放。
解决方法:
静态内部类加上弱引用(使用的时候记得判断activity的非空);
还有就是onDestory的时候,清空looper中还未执行的message,调用removeAllCallbackAndMessages(null)

2、广播或者service忘记解除注册和停止
3、资源类忘记释放

bitmap、包含了对象的arrary、io、stream、file、游标都应该在不在使用的时候进行关闭

bitmap.recyle();
bitmap=null;
//或者
arrary.clear();
arrary=null;
4、非静态内部类和匿名内部类

都是默认持有外部的应用,稍不注意就会与Activity的生命周期脱离,造成内存泄漏;
特别应该注意的是,在匿名内部类上进行异步操作,当操作回调回来后,activity可能已经消失不见了,由于持有外部的引用,导致不能正确的释放activity

5、非静态内部类中创建静态单例

由于非静态内部类持有外部的引用,静态的单例生命周期又和app的生命周期一致,所以会导致内存泄漏

6、静态集合类引发的泄漏
Static Vector v = new Vector(10);
for (int i = 1; i<100; i++)
{
Object o = new Object();
v.add(o);
o = null;
}
6、Bitmap稍不注意就会造成OOM

对于使用较多的bitmap将其缓存起来,对外提供add和get方法,对于使用较多的bitmap使用软引用,使用较少的使用弱引用

private Map > imageCache = new HashMap > ();

你可能感兴趣的:(内存泄漏)