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

Big*_*ast 3 java singleton android

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

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

public static Database getInstance(Context context) {
    if (Database.instance == null)
        instance = new Database(context);
    return instance;
}
Run Code Online (Sandbox Code Playgroud)

构造函数看起来像:

private Database(Context context) { 
    this.sqLiteDatabase = context.openOrCreateDatabase(...);
}
Run Code Online (Sandbox Code Playgroud)

Com*_*are 6

你传入什么并不重要。你使用的应该是Application上下文:

public static Database getInstance(Context context) {
    if (Database.instance == null)
        instance = new Database(context.getApplicationContext());
    return instance;
}
Run Code Online (Sandbox Code Playgroud)

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

public static Database getInstance(Application context) {
    if (Database.instance == null)
        instance = new Database(context);
    return instance;
}
Run Code Online (Sandbox Code Playgroud)

就个人而言,我喜欢将其视为 API 隐藏的实现细节。

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

有关更多信息,请参阅Dave Smith 的史诗般的博客文章,了解不同Context对象的角色