什么更有效率?存储变量引用与不存储(Android 中的上下文)
What's more efficient? Storing variable references vs not (Context in Android)
假设我们正在执行一个方法。我可以在两种编程风格之间进行选择。
选项 A:每次我需要访问资源时使用 getContext().getResources()
public void doSomeStuffA(){
//...
getContext().getResources().getDrawable(R.drawable.ic_launcher);
getContext().getResources().getDrawable(R.drawable.ic_arrow); //...
}
选项 B:将 getContext().getResources()
存储在变量中。
public void doSomeStuffB(){
//...
Resources r = getContext().getResources();
r.getDrawable(R.drawable.ic_launcher);
r.getDrawable(R.drawable.ic_arrow);
//...
}
哪种风格比较好?
作为一般做法(不是特别是这种情况)
使用选项 A:
资源不断变化,您需要资源的最新值。
如果您只对资源调用一次方法。
使用选项 B:
- 资源不变,您可以使用参考并在任何需要的地方使用它。
与性能和调优一样,正确答案是 "it depends"。 99% 的时间,额外的 hashmap 解引用与变量引用之间的区别并不是最大的(甚至是值得注意的)性能问题。诀窍是了解何时可能出现问题(例如,在紧密循环中频繁调用)。
在单一方法中,我倾向于使用选项 B,主要是为了提高可读性。
使用 Kotlin 让一切变得整洁干净)
fun someFun() {
with(getContext()) {
var d1 = getDrawable(R.drawable.ic1)
val d2 = getDrawable(R.drawable.ic2)
...
}
}
假设我们正在执行一个方法。我可以在两种编程风格之间进行选择。
选项 A:每次我需要访问资源时使用 getContext().getResources()
public void doSomeStuffA(){
//...
getContext().getResources().getDrawable(R.drawable.ic_launcher);
getContext().getResources().getDrawable(R.drawable.ic_arrow); //...
}
选项 B:将 getContext().getResources()
存储在变量中。
public void doSomeStuffB(){
//...
Resources r = getContext().getResources();
r.getDrawable(R.drawable.ic_launcher);
r.getDrawable(R.drawable.ic_arrow);
//...
}
哪种风格比较好?
作为一般做法(不是特别是这种情况)
使用选项 A:
资源不断变化,您需要资源的最新值。
如果您只对资源调用一次方法。
使用选项 B:
- 资源不变,您可以使用参考并在任何需要的地方使用它。
与性能和调优一样,正确答案是 "it depends"。 99% 的时间,额外的 hashmap 解引用与变量引用之间的区别并不是最大的(甚至是值得注意的)性能问题。诀窍是了解何时可能出现问题(例如,在紧密循环中频繁调用)。
在单一方法中,我倾向于使用选项 B,主要是为了提高可读性。
使用 Kotlin 让一切变得整洁干净)
fun someFun() {
with(getContext()) {
var d1 = getDrawable(R.drawable.ic1)
val d2 = getDrawable(R.drawable.ic2)
...
}
}