【问题标题】:Does hard coding of string affect performance?字符串的硬编码会影响性能吗?
【发布时间】:2013-05-08 05:09:34
【问题描述】:

每当我制作任何应用程序时,我总是对字符串进行硬编码,而不是从 XML 的字符串资源中引用它。应用程序运行良好,但警告我使用 @string 资源

示例按钮:

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="click here" />

我的问题是这样做是否会影响我的应用程序性能,或者它(@string资源)只是用于国际化。

【问题讨论】:

  • 如果你对他们进行硬编码,你会从开发者那里得到更差的性能。 ;)

标签: android performance


【解决方案1】:

这是一个 Android lint 警告,可帮助您进行本地化。

从技术上讲,硬编码字符串会使您的应用程序性能更好一些,因为它不必每次都从相应的R int 中查找字符串。但是,这种性能差异可以忽略不计,没有人能够注意到它。

但是,您应该始终将您的 String 资源保存在 values 文件夹中,因为它使本地化变得非常容易。

【讨论】:

  • @Raghunandan 是的。大概在 10-100 毫秒的范围内。
  • 只是出于兴趣,关于“每次都查找字符串”;它不会在每次应用程序运行时查找一次字符串,然后在缓存中查找一次吗?或者这被认为是过早的优化?
  • @deworde 嗯。你可能有一点。我不太确定,但我会检查并回复你。
  • @deworde 我查看了源代码,没有涉及任何缓存,至少在 Java 方面是这样。所有 getString() 和 getText() 调用都在 AssetManager.getResourceText() 处结束,然后将执行传递到本机代码。至少在此之前没有任何类型的缓存或临时存储。
【解决方案2】:

我认为您没有理由使用硬编码字符串获得更差的性能。硬编码字符串涉及的步骤更少。但是,将资源字符串与应用程序和 UI 代码分开无疑是最佳实践。

【讨论】:

    【解决方案3】:

    它不会产生任何性能问题。但是为了便于维护和本地化,鼓励在 strings.xml 中定义字符串。例如考虑以下两种情况。

    场景 1

    当您需要更改在许多地方使用的字符串时。在您的情况下,您将必须更改所有布局中的所有 "click here"。但是,如果您在 strings.xml 中声明,那么只有在 xml 中所做的更改才会全部更改。

    场景 2

    再举一个例子,如果你想为不同的语言环境显示不同的语言,那么你需要使用 string.xml。

    【讨论】:

      【解决方案4】:

      正如其他人所说,这是为了本地化, 但对于性能,这取决于每秒查找这些字符串的次数。 我见过一个应用程序启动缓慢的情况,堆栈采样显示 50% 的时间用于字符串的资源查找,而查找字符串的原因是在启动画面上显示它们在应用启动时为用户提供一些可以查看的内容!

      【讨论】:

        【解决方案5】:

        我不认为硬编码字符串会使你的程序运行得更慢。事实上它会提高性能,因为不需要在 R.java 类中查找字符串。 从strings.xml 引用字符串是最佳实践,原因有两个:-

        1- 本地化 2- 如果您在多个地方使用相同的字符串并且想在所有地方编辑相同的字符串,则可以节省单独编辑所有硬编码字符串的开销。

        【讨论】:

          【解决方案6】:

          硬编码字符串不会直接影响性能。影响可维护性。

          如果您对字符串进行硬编码,并且在稍后阶段如果您想将字符串“Click me”更改为“add”或其他内容,那么您需要搜索您的完整项目以更改字符串的位置和全部用过的。所以最好始终遵循strings.xml。 :)

          【讨论】:

            【解决方案7】:

            您的应用将不支持Localization,如果这不是您的应用的要求,那么使用硬编码字符串将没有问题。

            【讨论】:

              猜你喜欢
              • 2018-04-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-09-14
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-04-29
              相关资源
              最近更新 更多