Android:扩展Application类。为什么我们需要实现单例模式?

时间:2017-08-27 08:32:40

标签: android android-application-class

我想将我的数据库连接对象放到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()

是否真的有必要实施单例模式?

2 个答案:

答案 0 :(得分:3)

默认情况下,应用程序类是单例的。你不能自己创建应用程序.Android System会在第一次将应用程序加载到内存时创建它。你在这里使用单例模式只是为了从中获取Application对象应用程序中的任何地方

答案 1 :(得分:3)

Application类是应用程序上下文的访问点,通常用作所有应用程序范围的依赖项(如数据库对象)的初始化程序。此类仅在每个应用程序初始化在内存中持续存储,直到应用程序不再在内存中。所以它是一个原生的单身人士。

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

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