美文网首页
内存泄漏解析

内存泄漏解析

作者: 瞬息之李 | 来源:发表于2017-08-30 20:09 被阅读0次

常识

  1. 非静态内部类(包括匿名内部类:)默认会持有外部类的引用
  2. 静态内部类不会持有外部类的引用
  3. 静态存储区(存储静态数据,全局的static数据),在程序运行中,它都存在

情况一:
在单例模式中,使用的是静态的对象,所以该对象不能引用生命周期比他短的实例(比如activity的context),要保证他持有的对象跟他自己的生命周期一样长

情况二:使用非静态内部类创建静态实例
非静态内部类会持有外部类的对象,而再用此非静态内部类去创建了静态的对象,静态对象生命周期跟app的生命周期一样长,这就导致外部类释放不掉

实例

  1. handle使用:handle是一个匿名内部类,所以使用它时默认会持有外部类的对象(activity),当外部引用(如activity)提前销毁时,但是handle还没有处理完全部消息时,就会造成内存泄漏。所以一般都将handle设为静态内部类,这样就不会引用外部类,但是如果需要使用外部类的对象时,可以将其设为软引用,方便gc回收

  2. asynTask和runnable : 都属于匿名内部类,如果外部的引用提前销毁了(如activity),但是asyntask的任务还没有执行完,则会造成内存泄漏。所以默认都设置为静态内部类,要使用外部对象时,将其设置为软引用,方便gc回收

3.资源未释放造成的内存泄漏,如注册与取消注册问题,bitmap的回收等等。

相关文章

  • Android 内存泄漏

    【Android 内存泄漏】 引用: ★★★ 【知识必备】内存泄漏全解析,从此拒绝ANR,让OOM远离你的身边,跟...

  • 2018-03-07

    持续更新,嘿嘿~ Android内存泄漏解析 ​内存泄漏也称作“存储渗漏”,用动态存储分配函数动态开辟的空间,在使...

  • 内存泄漏解析

    常识 非静态内部类(包括匿名内部类:)默认会持有外部类的引用 静态内部类不会持有外部类的引用 静态存储区(存储静态...

  • 【Android测试】内存泄漏检测 LeakCanary

    什么是内存泄漏和内存溢出?内存泄漏有什么危害?LeakCanary检测内存泄漏? 内存泄漏(Memory Leak...

  • 内存泄漏全解析

    作者简介 原创微信公众号郭霖 WeChat ID: guolin_blog 本篇是南尘的第二篇投稿,全方位分析了导...

  • 为何每次用完ThreadLocal都要调用remove()?

    什么是内存泄漏 Key 的泄漏 Value 的泄漏 如何避免内存泄露 什么是内存泄漏 内存泄漏指的是,当某一个对象...

  • Android如何打造高质量的应用?( 三)

    内存泄漏内存泄漏简单来说就是没有回收不再使用的内存,排查和解决内存泄漏也是内存优化无法避开的工作之一。很多内存泄漏...

  • Android 内存泄漏案例和解析-转载Drakeet博客

    为了方便自己再次看,转载过来。drakeet大神的个人博客:Android 内存泄漏案例和解析

  • Android内存泄漏场景及解决方法

    本文包括以下内容: 内存泄漏原理 Android内存泄漏发生的情况 检测内存泄漏的工具、方法 如何避免内存泄漏 更...

  • 内存泄漏

    什么是内存泄漏引起内存泄漏的原因野指针,空指针,僵尸对象 1.什么是内存泄漏 内存泄漏(Memory Leak)是...

网友评论

      本文标题:内存泄漏解析

      本文链接:https://www.haomeiwen.com/subject/febxjxtx.html