XML字符串资源 vs Java常量字符串?

8
我有一个字符串,类似于 String data="apps"; 我知道在Android中有两种方法加载字符串...
第一种是...
所以它是一个常量,我将其定义为...
public static final String data="apps";

另一种类型是在res/vslues/strings.xml文件中定义它,例如...
<string name="data">apps</string>
<string name="hello_world">Hello world!</string>

如果我想要使用它...
第一种方式 ClassName.data
第二种方式 context.getResources().getString(resourceid)
问题:所以现在我的问题是,我想在30个不同的类中使用相同的字符串,并且我有更多的变量。在上述方法中哪一个会更快地加载并占用更少的内存?

1
更倾向于第二个,因为如果您在所有活动中都使用相同的内容且希望再次更改它,则只需要在strings.xml中更改一次即可。我认为加载时不会有太大区别。 - Raghunandan
1
这取决于这些常量和资源将被用在哪里。我认为对于Java代码来说,常量更好,因为您不需要使用读取字符串值的方法,比如资源。但是资源在本地化处理方面可能更好。 - Pankaj Kumar
strings.xml 比常量更快 - Dakshesh Khatri
1
请查看Raghav Sood的回答:https://dev59.com/x2Qn5IYBdhLWcg3w9bCi。 - Raghunandan
2
@kalyanpvs https://dev59.com/-mfWa4cB1Zd3GeqPeCbm - Raghunandan
显示剩余11条评论
5个回答

13

无论哪种情况,速度都不应该是问题。我建议根据有意义的方式进行组织。

常量类

将内部使用的字符串常量,例如数据库列名或其他键放在其中。

strings.xml

放置用户界面上显示的字符串。这样您就可以利用本地化等功能。

按照要求,您应该优先选择基于XML的第二种方法。


这对我来说听起来是最合乎逻辑的答案。谢谢。 - filthy_wizard

1
XML字符串值是用来显示字符串的,可以根据语言环境进行覆盖。这样,您可以通过常量键引用可翻译的显示值。

1
你应该考虑使用XML字符串作为一种向用户显示内容并根据地区更改的方式。
尽管如此,public static final String data="apps"; 应该用于隐藏一些非用户数据,例如数据库连接、日志消息等。

0

我认为速度和内存使用量应该是相同的。类中的常量就像string.xml中的常量一样,只需存储一次,然后在其他需要时引用它。但是,将其存储在string.xml中的优点是可以避免额外的导入代码行。同时,您必须记住,使用string.xml存储时,只能在活动上下文可访问的地方使用它。


0
我建议您利用Android资源系统。
引用书籍Android In Practice的话: Android中的资源是高效且快速的。 XML资源被编译成二进制格式。 这使它们在开发时友好,而在运行时不会变慢。

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