Android内存 - 声明全局变量

时间:2015-10-27 07:47:05

标签: java android memory

我使用的TextView在每次单击按钮或关闭某个对话框等时都会发生变化。

因为我在onCreate方法之外声明了变量。

private TextView text;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    text = (TextView) findViewById(R.id.text);
}

在内存堆中,我发现TextView使用了大量内存。

问题

每当我需要变量时,我会更好地声明变量。像这样。那么,最好的方法是什么?

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    TextView text = (TextView) findViewById(R.id.text);
    text.setText("Blabla");
}

private void setText(String text) {
    TextView text = (TextView) findViewById(R.id.text);
    text.setText(text);
}

private void onDismiss...() { // Just an example, I have many methods
    TextView text = (TextView) findViewById(R.id.text);
    text.setText("cancelled");
    text.setTextSize(32 * scale);
}

2 个答案:

答案 0 :(得分:2)

所以你需要了解一些事情。

  1. text = (TextView) findViewById(R.id.text);
    上述行并不意味着您正在创建TextView。遇到setContentView()时,会创建布局中的views。这是创建视图时的情况,而不是在您执行findViewById()时的情况。上面的代码行只是让您引用已经在内存中的TextView

  2. 可以多次拨打findViewById()吗?如果您的布局有很多视图且层次结构太深而且您使用的是RelativeLayout,那么同一视图的所有时间都会调用findViewById(),这会浪费代码行和性价比(非常略)。

  3. 所以我建议你使用你建议的Method 1。这使代码保持整洁。 Method 2绝不会减少Method 1以上的内存消耗。

答案 1 :(得分:0)

哪个更好取决于您的需要。您可以从不同方面查看您的应用程序成本。像记忆成本,计算成本等。

现在,出于内存目的,第二个更好,因为它不会占用整个时间的内存。

但是从计算的角度来看,每次你需要发起同样的事情。相同的结果,但同样的工作一次又一次地完成。设备需要分配一个新的内存,发送它的引用,当它完成时删除它,再次在内存的另一部分分配相同的东西可能。

所以,你应该选择你要牺牲的那个。

相关问题