【问题标题】:What's more efficient? Storing variable references vs not (Context in Android)什么更有效率?存储变量引用与不存储(Android 中的上下文)
【发布时间】:2015-02-11 04:32:23
【问题描述】:

假设我们在一个方法的中间。而且我可以在两种编程风格之间进行选择。

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

哪种风格更好?

【问题讨论】:

  • 如果你多次调用资源的方法,最好使用选项B。但有时如果资源不断变化,你必须调用资源使用选项A的最新值的方法
  • 你的意思是反过来?
  • 我更正了抱歉:P
  • @Vwin 我将它从 4 缩短到 2 倍。使用选项 A 还是更好吗?
  • 如果资源不变,我仍然会使用上述规则并使用选项 B。可能不会有重大的效率变化,但仍然是一个很好的做法。而如果你有一个单一的tstament,我会选择选项A

标签: java android performance optimization


【解决方案1】:

在性能和调优方面,正确答案是“视情况而定”。 99% 的情况下,额外的 hashmap 取消引用与变量引用之间的差异并不是最大的(甚至是值得注意的)性能问题。诀窍是了解何时可能会出现问题(例如,紧密循环中的频繁调用)。

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

【讨论】:

    【解决方案2】:

    作为一般做法(不是特别是这种情况)

    使用选项 A:

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

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

    使用选项 B:

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

    【讨论】:

    • 那么,当您需要在同一范围内多次引用变量时,请使用选项 B? (假设资源在引用之间没有变化)
    • 是的,我会这样做。这绝对比每次都获取资源要好
    • 资源是不可变的,怎么可能改变?
    • 我说的是一般意义上的。与其调用两次方法来获取某些东西,不如调用一次并使用该引用
    【解决方案3】:

    使用 Kotlin 让一切变得整洁干净)

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

    【讨论】:

      猜你喜欢
      • 2019-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-11
      • 1970-01-01
      • 2011-02-05
      • 2017-04-10
      • 1970-01-01
      相关资源
      最近更新 更多