Java 我应该在单例中使用哪个android上下文?

Java 我应该在单例中使用哪个android上下文?,java,android,singleton,Java,Android,Singleton,当我编写我的单例时,我总是在单例类中提供一个getInstance(Context)方法。但是我应该向该方法传递哪个上下文对象:活动上下文(活动类中的this)还是应用程序上下文?如果我通过一个或另一个,会有什么不同 为了举例说明,我有一个数据库管理器,其getInstance方法定义如下: public static Database getInstance(Context context) { if (Database.instance == null) instan

当我编写我的单例时,我总是在单例类中提供一个
getInstance(Context)
方法。但是我应该向该方法传递哪个上下文对象:活动上下文(活动类中的
this
)还是应用程序上下文?如果我通过一个或另一个,会有什么不同

为了举例说明,我有一个数据库管理器,其getInstance方法定义如下:

public static Database getInstance(Context context) {
    if (Database.instance == null)
        instance = new Database(context);
    return instance;
}
构造函数看起来像:

private Database(Context context) { 
    this.sqLiteDatabase = context.openOrCreateDatabase(...);
}

你所传递的并不重要。您应该使用
应用程序
上下文:

public static Database getInstance(Context context) {
    if (Database.instance == null)
        instance = new Database(context.getApplicationContext());
    return instance;
}
现在,如果要强制调用方提供
应用程序
,可以执行以下操作:

public static Database getInstance(Application context) {
    if (Database.instance == null)
        instance = new Database(context);
    return instance;
}

个人,我喜欢考虑由API隐藏的实现细节,

应用程序是一个全局对象,在创建进程时创建。因此,它实际上是“预先泄漏的”。你不能再泄露了。从某些单例引用的其他类型的
上下文
(例如,
活动
),可能会导致内存泄漏


有关更多信息,请参阅。

使用
上下文。getApplicationContext()是使用ApplicationContext的一个非常好的解决方案。但是我需要知道它在应用程序中有什么不同。嗨@commonware,你能花一分钟看看我的问题吗,我将非常感激。非常感谢。