深入 android 内存泄漏

来源:互联网 发布:网络打鱼作弊软件 编辑:程序博客网 时间:2024/06/10 04:27

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左右。