安卓开发 - strings.xml vs 静态常量

22

我想的是:

在布局(xml)中使用strings.xml中的字符串。静态常量用于代码(.java)使用。

当涉及到最佳实践时,我想知道应该使用哪种方法。

如果有很多字符串,会影响性能吗?

getString(...) vs MyConstants.THIS_IS_A_CONSTANT

2
如果您不关心Android支持的本地化或其他限定符,那么您可以使用Java常量。我认为常量会稍微快一些,因为它们可以被编译器内联并且不需要膨胀。然而,这可能只是微小的优化,所以如果您没有在UI线程上执行任何循环操作,并且不断膨胀字符串或字符串数组,则不必过于担心。 - MH.
如果您想将应用程序发布到不同的语言环境中,那么所有出现在用户界面上的字符串都应该放在strings.xml文件中。其余的内容可以根据需要设置为静态内容。 - Hoan Nguyen
1
如果你真的追求“最佳实践”,即使在一个小的个人项目中,也不要硬编码UI字符串。最好避免那些会让你的同行程序员在国际化你的代码时向你的咖啡里倒盐的坏习惯。即使在代码中,有些字符串也应该是资源,例如处理可能因地区而异的用户输入。 - MarsAtomic
1个回答

49

这两种情况都有一些优点和缺点(我应该说是有优点和较少的优势)。

就像你问题的评论中所说的一样,它们已经涵盖了所有内容。我只想补充一些细节。

本地化:

对于本地化问题,String资源肯定是最好的选择,因为您可以针对不同语言环境使用不同的语言文件。

内存:

由于String资源保存在xml文件中,因此存在一些额外的开销(尽管不是很大的开销)。

性能:

从内存中读取总是比从文件中读取要快。虽然在这种情况下性能差异不太明显。

维护:

这只是个人意见。对我来说,维护res文件比维护类中的string更容易。对我来说,string.xml更可读。

最后:

所以我的建议是

对于将显示给用户的文本,请使用String资源。

并且

对于程序的内部用途,如数据库名称、内部变量、意图过滤器名称等,请使用静态常量。


3
据我所知,XML文件也会被编译进APK中,因此我认为不会有任何负荷过重的情况。 - Quentin Roy
2
另一件事是,XML 中的字符串可以直接在 XML 布局中使用,但常量不行。 - Yoann Hercouet
1
String.xml 被编译成 Java 常量,因此没有文件读取的开销。 - Talha
@Talha XML文件中的字符串不会编译为Java常量。您可以通过使用apktool反编译APK文件并检查XML文件是否仍然存在来验证它。 - HendraWD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接