Resources.getSystem()与getResources()有何区别?

18

我是Android的新手,正在通过网络上可用的资源自学SDK。

现在我遇到了一个情况。我正在尝试以下代码:

类型1:getResources().getString(android.R.string.cancel);

类型2:Resources.getSystem().getString(android.R.string.cancel);

类型3:getString(android.R.string.cancel);

以上所有方法返回相同的值。那么这些方法是什么,它们的使用场景是什么?在什么时候使用哪种方法是好的实践?请帮帮我。

3个回答

11

区别不仅在于你得到了什么,而且还在于你可以在哪里使用它们。

第一个和第三个选项在内部使用"上下文(context)",因此很多情况下(例如静态成员或非活动成员),你不能直接使用它们,除非你将上下文或资源作为静态变量或参数传递到你的范围内。但是第二个选项

Resources.getSystem().getString(android.R.string.cancel)

你可以在应用程序中的任何地方使用ABSOLUTELY EVERYWHERE,甚至是静态常量声明!但仅限于系统资源。


7
不过,它也存在一些缺点。Resources.getSystem()仅提供对系统资源(不包括应用程序资源)的访问,并且未配置为适用于当前屏幕(无法使用尺寸单位,不会根据方向更改等)。 - Alexander Suraphel
1
@AlexanderSuraphel 请注意答案的最后一句话。我完全同意你的观点。 - Gangnus

4

这三种方法返回的值相同,但Resources.getSystem()引用系统资源,如果使用不当可能会导致崩溃

建议的用法是"getString(android.R.string.cancel);"。

在安卓开发者网站的WalkieTalkieActivity.java代码中也是这样使用的


是的,我尝试过使用Resources.getSystem(),但在某些地方会强制关闭。我建议尝试另外两种方法。 - Ramesh Bugatha

1
这三种方法都是相同的。 这是根方法:getApplicationContext().getResource().getString(""),这是快捷方式:getString("") 在处理应用程序上下文时,请使用快捷方式方法。 几乎在每种情况下,我们使用getString()来获取在String文件中定义的字符串。

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