我可以将它们存储在res / strings
中<resources>
<string name="str1">app</string>
</resources>
我可以将它们存储在静态const
中public static final string str1 = "app"
哪一个更好?
我的意思是哪一个会使用更多内存,哪一个会使包更大。
答案 0 :(得分:3)
如果您需要更改应用视图中的某些文字,那么您无需查找您撰写该文字的位置。您只需转到strings.xml
文件夹中的res
即可更改字符串。因此,第一个选项永远是更好的选择。
如果您想要一个将在您的应用中用作键的字符串,那么您可以将其存储在静态常量变量中。例如:如果您想通过intent
或以任何其他方式传递数据,那么您必须传递密钥。该键将是一个字符串,可以存储在一个静态常量变量中。
答案 1 :(得分:1)
如果你把字符串视为常量,那真的是依赖。 如果string是常量(例如,将作为intent的键发送的字符串),那么您可以创建一些Constants类或将其定义为activity / fragment类中的常量。如果这些字符串是将在应用程序UI上显示的文本,则应将它们定义为应用程序中的资源。 BTW所有资源字符串可以本地化到不同的语言
如果您需要更多信息或示例,请告知我们。
答案 2 :(得分:1)
包装尺寸:
我相信“Ran Hassid”的评论很好地描述了包装尺寸。
内存使用情况:
只需创建一个带有一些静态最终字符串的android apk文件,然后对其进行反编译。您将看到变量在编译版本中没有初始值,并且值将在所有引用中替换!
例如,从我的反编译的apk中查看此示例,这也是由proguard表示的:
public static String f10850f;
...
...
...
hashMap.put(C1554f.m14687a("\u0014]SCVQ^V"), str);
这是我写的实际代码:
public static String packageName="\u0014]SCVQ^V";
...
...
...
hashMap.put(EncryptorClass.decrypt(packageName), str);
在这种情况下,我编写的代码中的静态final String变量的值为“\ u0014] SCVQ ^ V”,但它不在运行时使用,只是复制/粘贴在相关的代码段中。
因此,使用静态final String变量不需要内存,因为变量没有初始值。
Have a look at android docs about using static final variables
Also take a look at this post regarding memory of variables with no value
总体而言,我使用静态最终变量和字符串资源用于不同目的,例如代码加密,语言支持以及是否要使用Context访问变量。