我有一个在后台运行的服务。它从设备启动时开始,与活动完全分开。
如果我要使用房间,应该如何使用databaseBuilder
?可以为服务和应用两次构建两次吗?它会建立相同的数据库实例吗?
答案 0 :(得分:0)
您应该为整个应用程序提供数据库的单个实例。您可以使用单例将其存档,例如:
@Database(entities = [YourEntity::class], version = 1)
abstract class YourRoomDatabase: RoomDatabase() {
abstract fun yourDao(): YourDao
companion object {
private var INSTANCE: YourRoomDatabase? = null
fun getInstance(context: Context): YourRoomDatabase {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context, YourRoomDatabase::class.java, "yourdb.db").build()
}
return INSTANCE!!
}
fun destroyInstance() {
INSTANCE = null
}
}
}
然后您可以从任何喜欢的地方调用它:
YourRoomDatabase.getInstance(context)
答案 1 :(得分:0)
Room database builder
将在第一次运行时创建数据库。之后,其工作是打开现有(创建)的数据库。例如,我们可以想到打开数据库时的callback
函数。各个活动的活动可能有所不同。因此,您可以在应用程序中根据需要使用构建器。但是您应该保持正确关闭connections, statements and resultsets
等的良好做法。