博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 内存泄漏出现的情况
阅读量:4653 次
发布时间:2019-06-09

本文共 777 字,大约阅读时间需要 2 分钟。

    • 非静态内部类的静态实例
      由于内部类默认持有外部类的引用,而静态实例属于类。所以,当外部类被销毁时,内部类仍然持有外部类的引用,致使外部类无法被GC回收。因此造成内存泄露。
    • 类的静态变量持有大数据对象

      静态变量长期维持到大数据对象的引用,阻止垃圾回收。

    • 资源对象未关闭

      资源性对象如Cursor、Stream、Socket,Bitmap,应该在使用后及时关闭。未在finally中关闭,会导致异常情况下资源对象未被释放的隐患。

    • 注册对象未反注册

      我们常常写很多的Listener,未反注册会导致观察者列表里维持着对象的引用,阻止垃圾回收。

    • Handler临时性内存泄露

      Handler通过发送Message与主线程交互,Message发出之后是存储在MessageQueue中的,有些Message也不是马上就被处理的。

    • 内部线程泄露new Thread(){}.start();Java中的Thread有一个特点就是她们都是直接被GC Root所引用,也就是说Dalvik虚拟机对所有被激活状态的线程都是持有强引用,导致GC永远都无法回收掉这些线程对象,除非线程被手动停止并置为null或者用户直接kill进程操作。看到这相信你应该也是心中有答案了吧 : 我在每一个MainActivity中都创建了一个线程,此线程会持有MainActivity的引用,即使退出Activity当前线程因为是直接被GC Root引用所以不会被回收掉,导致MainActivity也无法被GC回收。所以当使用线程时,一定要考虑在Activity退出时,及时将线程也停止并释放掉
    • Context泄露
    • 内部类的创建需要小心,由于内部类会持有外部类对象,不小心就会造成内存泄漏

转载于:https://www.cnblogs.com/ldq2016/p/6628640.html

你可能感兴趣的文章
PHP流程管理,堪比小小程序
查看>>
1.Mongo聚合
查看>>
数据库列的特征
查看>>
hihoCoder #1582 : Territorial Dispute 凸包
查看>>
打包ideaUI本地项目,以供本地使用
查看>>
C语言中字符串的创建
查看>>
[转载]C#深入分析委托与事件
查看>>
[ log4j ]-日志文件的使用
查看>>
CEF3开发者系列之进程和线程
查看>>
.2-浅析webpack源码之打包后文件
查看>>
SQLServer 2008以上误操作数据库恢复方法——日志尾部备份
查看>>
html如何绑定radio控件和label控件
查看>>
Java中的泛型
查看>>
PHP的类自动加载机制
查看>>
常用排序算法的总结以及编码(Java实现)
查看>>
MySQL
查看>>
HTTP/2 和 Websocket
查看>>
hdu 2050 折线分割平面
查看>>
[翻译svg教程]svg 中的g元素
查看>>
普通类中能不能有函数模板?/有函数模板的类可以是普通类吗
查看>>