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)
你传入什么并不重要。你使用的应该是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对象的角色。
| 归档时间: |
|
| 查看次数: |
1272 次 |
| 最近记录: |