内存泄漏

1、内存溢出和内存泄漏的区别,常见内存泄漏

内存溢出:一个程序被分配的内存空间是一定的,当申请的内存容量不足时就会OOM

内存泄漏:使用过的对象被其他活动的或者使用的对象所持有,不能被gc回收,导致内存泄漏,内存泄漏累计起来会造成内存溢出

将非静态对象传给了静态对象持有,例如,将当前activity的context传递给单例模式的构造函数,一方面在使用时应该使用applicationContext,另一方面可以在设计单例模式时,将context转化为applictioncontext,或者不让使用者传入context

非静态的内部类引发的内存泄漏,非静态内部类会隐式持有外部对象,造成内存泄漏,可以将内部类设置为静态的,使用外部类时,可以使用弱引用

使用MVP架构时,由于presenter持有View对象,当view关闭时Presenter还在执行耗时操作违背销毁,造成View无法回收,可以使用若引用。

注册和反注册未成对使用,资源对象未及时关闭,如cursor,File,Bitmap等,集合对象未及时清理等。

2、handler造成的内存泄漏及解决办法

原因:使用handler一般用来解决子线程和主线程通讯问题,或者刷新UI,一般都会使用内部类甚至匿名内部类,内部类会隐性地持有外部类对象,例如activity关闭了,但子线程未跑完或者使用handler延时发送消息时,由于内部handler持有了activity对象,就会造成内存泄漏。

解决办法:关闭activity停止子线程,remove掉handler当中的消息,同时使用静态内部类,他不会持有外部类的对象,若要使用外部类的变量,可以以弱应用的形式持有外部类对象。

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

推荐阅读更多精彩内容

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