当我写单身时,我总是在单身类中提供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(...);
}
答案 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。