什么更有效率?存储变量引用与不存储(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)
        ...
    }
}