Android:扩展应用程序 class。为什么要实现单例模式?

Android: extending Application class. Why do we need to implement singleton pattern?

我想将我的数据库连接对象放入应用程序 class。我阅读了一些教程,到处都能看到单例模式的显式实现。像这样

public class MyApplication extends Application {
    private static MyApplication singleton;

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

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

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

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

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

默认情况下,应用程序 class 是单例的。您不允许创建应用程序 yourself.Android 系统将在第一次将应用程序加载到 memory.You 时创建它在这里使用单例模式只是为了从应用程序中的任何地方获取应用程序对象

Application class 是应用程序上下文的 访问点 ,通常它用作所有应用程序范围依赖项(如数据库)的初始化器目的。此 class 每个应用程序仅 初始化一次 并且 持久存在内存中 直到应用程序不再存在于内存中。所以它是一个原生创建的单例。

通过拥有这样的应用程序静态访问点,您可以在任何 class 中访问应用程序上下文,并且在一般情况下,当您需要此类依赖项时,此上下文更适合检索资源、系统服务等在您的自定义 classes 中,因为它不包含 link 到 activity 并且视图也是 泄漏安全 。当然,在您的示例中,Activity 可以访问应用程序,但是您必须 强制转换 上下文,并且最好对整个应用程序使用相同的方法。

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