深入 android 内存泄漏

Android 内存泄漏

         android 自动垃圾回收机制,所以一般很少出内存泄露,但一泄露就很难查。

         private static Drawable sBackground; 
  
       @Override 
protected void onCreate(Bundle state) { 
     super.onCreate(state); 
     TextView label = new TextView(this); 
     label.setText("Leaks are bad"); 
  
       if (sBackground == null) { 
                sBackground = getDrawable(R.drawable.large_bitmap); 
           } 
           label.setBackgroundDrawable(sBackground); 
  
          setContentView(label); 
      }

     这段代码由于background 导致整个activity 不能够释放。当时我看了就不是很明白。textview 引用了activity ,activity 又引用了textview ,textview 引用了 background ,background是一个静态变量。 那应该也会回收掉 activity 和textview ,除了background 。 后来查看了 setBackgroundDrawable 方法才明白 。

   

 

    由于background 会通过成员变量  来反向引用了 textview 导致的。

  

    最近看同事的一段代码:

       

    onkeydown(keycode){
             

           if(keycode == KeyEvent.keycode_back){

                 CustomDialog d = new CustomDialog(this);

                  ............
   }

    }

    反复点击backkey 会不停的 new dialog。 而d 又引用了activity。会不会导致不释放了。 

   

    通过eclipse自带的工具测试。内存测试。

   不停的点击backkey ,totalsize 会从1.47左右升到 1.52左右 然后会被垃圾回收一次。 又回落到1.47左右。


   

   


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值