0

我想将我的数据库连接对象放入 Application 类。我阅读了一些教程,并且到处都能看到单例模式的显式实现。像这样的东西

public class MyApplication extends Application {
    private static MyApplication singleton;

    public static MyApplication getInstance(){
        return singleton;
    }
    @Override
    public void onCreate() {
        super.onCreate();
        singleton = this;
    }
}

我的问题是为什么我需要做这个明确的实现?没有人解释。

我想在那里添加一些属性,初始化onCreate()并在活动中获取它的值。

myProp = (MyApplication)getApplicationContext().getMyProperty()

真的有必要实现单例模式吗?

4

2 回答 2

3

默认情况下,应用程序类是单例的。您不允许自己创建应用程序。Android 系统将在第一次将应用程序加载到内存时创建它。您在这里使用单例模式只是为了从应用程序中的任何位置获取应用程序对象应用

于 2017-08-27T09:07:12.623 回答
3

Application类是应用程序上下文的访问,通常它用作所有应用程序范围的依赖项(如数据库对象)的初始化器。这个类在每个应用程序中只初始化一次,并一直保存在内存中,直到应用程序不再在内存中。所以它是一个本地创建的单例。

通过对应用程序拥有这样的静态访问点,您可以访问任何类中的应用程序上下文,并且通常情况下,当您在自定义类中需要此类依赖项时,此上下文对于检索资源、系统服务等要好得多,因为它没有t 持有指向活动和视图的链接,因此是泄漏安全的。当然,在您的示例中,Activity可以访问应用程序,但无论如何您都必须转换上下文,并且更好地对整个应用程序使用相同的方法。

尽管您可以将它用作对所有应用程序范围和初始化的依赖项的全局访问点,但不要用庞大的初始化逻辑重载它,最好为此创建一些其他单例并从Application类中初始化它。在一个大项目中考虑使用 DI 框架,Dagger是最好的,用于提供依赖项。

于 2017-08-27T09:41:13.033 回答