内存泄漏

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 <String, SoftReference<Bitmap>> imageCache = new HashMap <String, SoftReference<Bitmap>> ();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 内存泄漏总结 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏...
    _痞子阅读 1,654评论 0 8
  • 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,...
    宇宙只有巴掌大阅读 2,415评论 0 12
  • Android 内存泄漏总结 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏...
    神奇的小蘑菇阅读 542评论 0 0
  • Android 内存泄漏总结 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏...
    apkcore阅读 1,237评论 2 7
  • 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,...
    DreamFish阅读 802评论 0 5