为什么Android完成执行后无法检索小部件的内存使用情况?

时间:2016-01-11 06:15:27

标签: android memory dialog garbage-collection widget

为什么Android在完成执行后没有检索小部件的内存使用情况?

以下是截图:

enter image description here

上图显示我与对话框进行交互。

public class MainActivity extends AppCompatActivity {

    Dialog builder;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        builder = new Dialog(this);
        RelativeLayout myrl = new RelativeLayout(this);
        RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        RelativeLayout.LayoutParams lp2 = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        RelativeLayout.LayoutParams lp3 = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        TextView textview = new TextView(this);
        textview.setText("Dynamically Coded");
        textview.setId(View.generateViewId());
        textview.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                builder.dismiss();
            }
        });
        NumberPicker numpick = new NumberPicker(this);
        numpick.setId(View.generateViewId());
        EditText edit = new EditText(this);
        lp2.addRule(RelativeLayout.BELOW, textview.getId());
        lp3.addRule(RelativeLayout.BELOW, numpick.getId());
        myrl.addView(textview, lp);
        myrl.addView(numpick, lp2);
        myrl.addView(edit, lp3);
        builder.setContentView(myrl);

        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                builder.show();
            }
        });

    }

每次打开对话框并关闭对话框时,都会占用大约.05MB内存。

为什么在我关闭对话框后立即检索到这个0.05MB的内存?

只有在使用所有可用内存空间时才进行垃圾收集。

有人可以解释为什么在我关闭对话框后没有检索到正在使用的内存吗?

1 个答案:

答案 0 :(得分:0)

Java不会运行垃圾收集器,因为垃圾收集会使事情慢下来,因此不应该非常频繁地运行。它在需要内存被释放时运行。因此,在您关闭对话框之后,系统仍然有足够的可用内存(还没有稀缺性),因此Java不会调用GC事件。始终最好尽可能延迟GC。

如果你希望在一个进程的内存被释放后立即释放它,你可以运行System.gc(),但不推荐这样做。