Android - 我需要一些澄清

时间:2017-01-16 17:51:25

标签: java android performance

1.我有TextView,ID为textView1

TextView tv = (TextView) findViewById(R.id.textView1);
tv.setText("Hellow World");

或不创建电视,

((TextView) findViewById(R.id.textView1)).setText("Hellow World");

II。

TextView tv = (TextView) findViewById(R.id.textView1);
tv.setText("Hellow World");
tv.setTextSize(someValue);
tv.setTag("title");

((TextView) findViewById(R.id.textView1)).setText("Hellow World");
((TextView) findViewById(R.id.textView1)).setTextSize(someValue);
((TextView) findViewById(R.id.textView1)).setTag("title");

哪种方法在两种情况下都很好,差异是什么。

2.similerly我有String childName需要从3种方法访问

i。我可以创建一个字段变量childName,可以从所有3种方法中访问

ii。通过每种方法传递变量,例如,

setChildFragment(childName);

in

public setChildFragment(String childName){
.
.
.
setChildView(childName);
}

和in,

public setChildView(String childName){
.
.
.
setChildTitle(childName);
}

最后在textview中,

public setChildTitle(String childName){

((TextView) findViewById(R.id.title)).setText("Hellow World");
}

哪种方法更好,为什么!!!

感谢提前

2 个答案:

答案 0 :(得分:1)

对于第一部分坦率地说,您的方法iii之间的唯一区别是,由于ii没有TextView对象的引用,因此可能会尽快收集GC,尽管您可以通过在tv=null;使用后编写i来实现相同目的。但无论如何,差异并不显着。

对于第二部分,最好存储对任何视图的引用,然后在其上调用方法而不是重复调用findViewById(R.id.textView1),这是一个昂贵的操作,因为它导致布局树遍历,并且可以是如果布局很大或很复杂,性能会受到影响。所以在这种情况下i更好。

第三部分再次不会产生任何明显的性能差异,因为引用变量或将它们作为函数参数传递不是主要的性能问题。

要提高应用性能,请考虑正确设计布局,并使用Android doc Read this中的良好做法获取更多信息

答案 1 :(得分:0)

您可以使用以下实现,即

((TextView) findViewById(R.id.textView1)).setText("Hellow World");

如果该值仅设置一次,则无需再次调用它。

但是就像你的情况一样,你在函数下面调用了3次,

public setChildTitle(String childName){

((TextView) findViewById(R.id.title)).setText("Hellow World");
}

因此,如果您在调用setChildTitle时采用此方法,TextView将一次又一次地初始化。相反,在onCreate函数中全局一次,您可以使用下面的方法对其进行初始化,然后在setChildTitle函数中将textView的setText函数调用为setText。

TextView tv = (TextView) findViewById(R.id.textView1);