我想将我的数据库连接对象放到 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()
真的有必要实现单例模式吗?
一Application
类是一个接入点,以应用程序上下文,一般它被用作像你的数据库对象的所有应用程序范围内相关性的initializator。这个类每个应用程序只初始化一次,并在内存中持续存在,直到应用程序不再在内存中。所以它是一个本地创建的单例。
通过对应用程序拥有这样的静态访问点,您可以访问任何类中的应用程序上下文,通常情况下,当您在自定义类中需要此类依赖项时,此上下文更适合检索资源、系统服务等,因为它没有t 持有指向活动和查看的链接,因此是防泄漏的。当然,在您的示例中,您Activity
可以访问应用程序,但无论如何您都必须转换上下文,并且最好对整个应用程序使用相同的方法。
尽管您可以将它用作所有应用程序范围和已初始化依赖项的全局访问点,但不要使用巨大的初始化逻辑重载它,最好为此目的创建一些其他单例,并从Application
类中对其进行初始化。在一个大项目中考虑使用 DI 框架,Dagger是最好的一个,用于提供依赖项。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句