我使用的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);
}
答案 0 :(得分:2)
所以你需要了解一些事情。
text = (TextView) findViewById(R.id.text);
上述行并不意味着您正在创建TextView
。遇到setContentView()
时,会创建布局中的views
。这是创建视图时的情况,而不是在您执行findViewById()
时的情况。上面的代码行只是让您引用已经在内存中的TextView
。
可以多次拨打findViewById()
吗?如果您的布局有很多视图且层次结构太深而且您使用的是RelativeLayout
,那么同一视图的所有时间都会调用findViewById()
,这会浪费代码行和性价比(非常略)。
所以我建议你使用你建议的Method 1
。这使代码保持整洁。 Method 2
绝不会减少Method 1
以上的内存消耗。
答案 1 :(得分:0)
哪个更好取决于您的需要。您可以从不同方面查看您的应用程序成本。像记忆成本,计算成本等。
现在,出于内存目的,第二个更好,因为它不会占用整个时间的内存。
但是从计算的角度来看,每次你需要发起同样的事情。相同的结果,但同样的工作一次又一次地完成。设备需要分配一个新的内存,发送它的引用,当它完成时删除它,再次在内存的另一部分分配相同的东西可能。
所以,你应该选择你要牺牲的那个。