companion object {
@Volatile
private lateinit var instance: ExampleDatabase
fun getInstance(context: Context): ExampleDatabase {
synchronized(this) {
if(!::instance.isInitialized) {
instance = Room.databaseBuilder(
context.applicationContext, // Why does this require context?
LottoDatabase::class.java,
"lotto_database"
)
.fallbackToDestructiveMigration()
.build()
}
return instance
}
}
}
上面的代码是创建房间数据库单例的通用方法。 我想知道为什么Room.databaseBuilder函数需要将context作为参数。我知道这个问题可能很愚蠢,因为我不理解Android中的Context。
- 我应该传递什么参数?
- 如果我传入Activity上下文或应用程序上下文会有什么不同?
2. 如果您传递了Activity上下文,则数据库实例将绑定到Activity的生命周期,并在Activity销毁时关闭。如果您传递应用程序上下文,则数据库实例将一直存在,直到应用程序完全退出。建议使用应用程序上下文来避免内存泄漏。