getResources()或创建自己的静态类?

时间:2011-08-04 07:18:22

标签: android

我注意到自己经常打字:

someVar = getResources().getString(R.string.someString);

我有几个XML文件,我正在解析和构建,为了确保文件保持一致,我已将标记名称放在res / values / strings.xml文件中。在几个活动中使用相同的句柄,其中一些活动扩展了ListActivity,而其他活动则没有这样创建一个容纳这些变量的简单超类(例如:

public class thisClass extends thatClass 
{...}

public class thatClass 
{
    package String someTag = "this";
    package String otherTag = "that"; 
}

我认为所有这些对getResources()的调用都会变得非常费力,并且想知道是否有利于创建一个R类型的文件,我可以静态地存储这些类型的常用变量:

public final class globalVars 
{
    public static final class XML_TAGS 
    {
        static final String someTag = "this";
        static final String otherTag = "that";
    }
}

并引用这些变量:

serializer.startTag("", globalVars.XML_TAGS.someTag);

而不是

serializer.startTag("", getResources().getString(R.string.someTag));

感谢您的投入!

1 个答案:

答案 0 :(得分:4)

好的,在查看了android.content.res.resources和其他一些类的源代码之后,很明显,与静态类相比,使用资源并通过getResources()获取资源代价高昂

实际上,返回的Resources实例不是静态容器,而是通过执行一些语句(无论是字符串还是可绘制或任何其他形式)来获取资源的对象。

然而使用getResources()有其优势

  • 它可以帮助您外部化您的资源
  • 对于任何类型的资源,您可以指定默认和多个替代资源,具体取决于区域设置屏幕深度/分辨率 ...

static容器可能提供比使用资源更便宜的替代方案,但请记住:任何后来的本地化尝试都会相对极其昂贵。