什么更有效率?存储变量引用与否(Android中的上下文)

时间:2015-02-11 04:32:23

标签: java android performance optimization

我们说我们正处于一种方法的中间。我可以选择两种编程风格。

选项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);
  //...
}

哪种风格更好?

3 个答案:

答案 0 :(得分:3)

在性能和调优方面如此之多,正确答案是“它取决于”。 99%的情况下,额外的散列图解除引用与变量引用之间的差异并不是最大(甚至是显着)的性能问题。诀窍是要了解它何时可能是一个问题(例如在紧密循环中频繁调用)。

在单一方法中,我倾向于使用选项B主要是为了可读性。

答案 1 :(得分:1)

作为一般惯例(特别不是这种情况)

使用选项A:

  • 资源不断变化,您需要最新的资源价值。

  • 如果您只在资源上调用一次方法。

使用选项B:

  • 资源不会改变,您可以使用参考并在任何地方使用它。

答案 2 :(得分:0)

使用Kotlin使一切都整洁干净)

fun someFun() {
    with(getContext()) {
        var d1 = getDrawable(R.drawable.ic1)
        val d2 = getDrawable(R.drawable.ic2)
        ...
    }
}