Android内存泄漏:销毁活动不会释放

时间:2012-01-16 22:51:16

标签: java android memory-leaks memory-management

我写了一个小测试用例来解释我的问题。正如你在onCreate方法中看到的那样,我在堆内存中分配了一个新的long数组(大约4MB的内存)。我想当我调用finish()并点击DDMS的“Cause GC”时,我会看到占用的内存不超过3或4 MB,就像我第一次启动应用程序时一样。 而是试图做这个动作:

  1. 点击按钮
  2. 点击“导致GC”
  3. 每次点击时,Heap中分配的内存增加了4Mb。

    现在我问为什么?我也注意到,如果我以正确的方式在onDestroy中为dumpArrayLong分配null垃圾收集器空闲内存。但是编写一个大型应用程序来记住在onDestroy()中分配null所有变量是不可能的。它总会引入内存泄漏。

    这是测试用例:

    package it.hello;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    
    public class HelloAndroid extends Activity {
    
         private long dumpArrayLong[];
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        dumpArrayLong = new long[1024 * 1024 / 2]; // 4 MB
    
        setContentView(R.layout.main);
        Button btn = (Button) findViewById(R.id.button1);
        btn.setOnClickListener(new OnClickListener() {
    
            @Override
            public void onClick(View v) {
                finish();
                startActivity(new Intent(HelloAndroid.this, HelloAndroid.class));
            }
        });
    }
    
    @Override
    protected void onDestroy() {
        super.onDestroy();
    }
    
    }
    

0 个答案:

没有答案