我应该在单身人士中使用哪个Android上下文?

时间:2017-11-23 00:48:40

标签: java android singleton

当我写单身时,我总是在单身类中提供getInstance(Context)方法。但是我应该将哪个上下文对象传递给该方法:活动上下文(Activity类中的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(...);
}

1 个答案:

答案 0 :(得分:3)

你传入的内容并不重要。您使用的内容应该是Application上下文:

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

现在,如果您想强制调用者提供Application,您可以这样做:

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

就个人而言,我喜欢考虑API隐藏的实现细节。

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

有关详情,请参阅Dave Smith's epic blog post on the roles of different Context objects