gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 07:44:34 26 4
gpt4 key购买 nike

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

为了说明,我有一个数据库管理器,它的 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(...);
}

最佳答案

你传入的内容并不重要。您使用 的应该是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了解更多。

关于java - 我应该在单例中使用哪个android上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47445991/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com