码迷,mamicode.com
首页 > 移动开发 > 详细

android 内存泄漏出现的情况

时间:2017-03-27 21:28:53      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:roo   内存泄漏   非静态内部类   答案   交互   new   hand   bitmap   创建   

    • 非静态内部类的静态实例
      由于内部类默认持有外部类的引用,而静态实例属于类。所以,当外部类被销毁时,内部类仍然持有外部类的引用,致使外部类无法被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泄露

android 内存泄漏出现的情况

标签:roo   内存泄漏   非静态内部类   答案   交互   new   hand   bitmap   创建   

原文地址:http://www.cnblogs.com/ldq2016/p/6628640.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!