Android 字符串的硬编码是否会影响性能?

Android 字符串的硬编码是否会影响性能?,android,performance,Android,Performance,每当我制作任何应用程序时,我总是硬编码字符串,而不是从XML的字符串资源中引用它。应用程序工作正常,但警告我使用@string资源 示例按钮: <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="click here" /> 我的问题是,如果我这样做,它是否会影响我的应用程序性能,或者它(@string资源)只是用于国

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

示例按钮:

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


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

我认为没有理由使用硬编码字符串会使性能变差。硬编码字符串涉及的步骤更少。不过,最好将资源字符串与应用程序和UI代码分开。

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

从技术上讲,硬编码字符串会让你的应用程序表现得更好一些,因为它不必每次都从相应的
R
int中查找字符串。但是,这种性能差异可以忽略不计,任何人都无法注意到


但是,您应该始终将字符串资源保存在values文件夹中,因为这使本地化非常容易。

这不会产生任何性能问题。但是,为了便于维护和简化,鼓励在strings.xml中定义字符串。例如,考虑下面两个场景。

情景1

当您需要更改在许多地方使用的字符串时。在您的情况下,您必须更改所有版面中的所有
“单击此处”
。但是如果您在strings.xml中声明,那么只有在xml中所做的更改才会更改它们

场景2


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

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

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

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

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


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

正如其他人所说,这是为了本地化, 但就性能而言,这取决于每秒查找这些字符串的次数。
我见过一个应用程序启动缓慢的案例,堆栈采样显示50%的时间都花在字符串的资源查找上,而查找字符串的原因是在启动屏幕上显示它们,让用户在应用程序启动时可以看到它们

@raghundan是的。可能在10-100毫秒的范围内。只是出于兴趣,关于“每次查找字符串”;它不会在每次应用程序运行时查找字符串一次,然后再在缓存中查找吗?或者这被认为是过早的优化?@deworde-Hmm。你可能有道理。我不太确定,但我会检查一下,然后再给你回复。@deworde我查看了源代码,没有涉及任何缓存,至少在Java端是正常运行的。所有getString()和getText()调用都在AssetManager.getResourceText()上结束,然后将执行传递给本机代码。至少到目前为止,还没有任何缓存或临时存储。如果您硬编码,开发人员的性能会更差。;)