在Java中(安卓)静态类 - 使用或不使用(Static class in Java (Andro

2019-08-17 04:09发布

最近我一直在Java中开始开发Android版。

我的想法是创建一个静态类将加载吨的开始和结果存储工具和应用程序的生命周期。

我一直在阅读大量的如何共享活动之间的对象,我认为最好的,是要创造一个静态类。 你怎么看? 我应该使用另一种方法? 我问,因为我看过很多柜台的意见在互联网上的。

谢谢。

Answer 1:

我假设你是指一类的静态字段 ,而不是静态类 ,如Wyzard指出的那样,是完全不同的东西。 根据经验,一般情况下,在静态字段中保存的信息是不是在Java的一个好主意。 这样做的原因是,它可以防止实例化的无论是你在课堂上存储多个实例的能力。

在Android应用程序的特定情况下,最好的方式来处理具有数据存储的应用程序本身是继承相关的问题android.app.Application类,并用它来处理应用程序全局数据:

class FooApplication extends Application
{
    private String privData;

    public String getPrivData() {
        return privData;
    }
}

然后,您需要声明这个类是你的主应用程序类(而不是默认的Application )。 在application中的条目AndroidManifest.xml添加以下内容:

<application android:name="com.example.application.FooApplication"
             ...>
    ...
</application>

然后,您可以使用该方法,您的应用程序内的任意位置查找应用程序实例Context.getApplicationContext()这将是你的一个实例Application子类:

FooApplication app = (FooApplication)Context.getApplicationContext();
String privData = app.getPrivData();

从正在试图寻找的“应用程序”子靠,你可能需要调用“getApplicationContext()”没有“背景”:

FooApplication app = (FooApplication)getApplicationContext();
String privData = app.getPrivData();


Answer 2:

与您的解决方案的问题是,你基本上建立全局的一个巨大的堆栈。 这有时是不可避免的,但它具有相同类型问题的全局变量总是有─你快结束了难以阅读的代码,并没有真正有一个良好的面向对象的故障。 您可以使用此功能,但只使用它具有重要的数据结构是真的要来了许多活动之间共享sparingly-。



Answer 3:

Android提供了一个叫做类Application ,这是不会,只要你的应用程序没有杀死gc'ed。 使用这个类的初始化,静态类的容器是有些难看,但我不能查明这是为什么。

我只是把它们作为容器常量如不能表示为EnumSets位掩码。

至于其他职位提SharedPreferences :我觉得喜好存在存储值,但不加载,你需要为你的应用程序的结构。 这些结构应该代表或弥补您的数据的语义模型的构建被加载。



文章来源: Static class in Java (Android) - use or not use