通过服务和活动访问会议室数据库

时间:2019-02-12 13:59:44

标签: android android-room

我有一个在后台运行的服务。它从设备启动时开始,与活动完全分开。

如果我要使用房间,应该如何使用databaseBuilder?可以为服务和应用两次构建两次吗?它会建立相同的数据库实例吗?

2 个答案:

答案 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等的良好做法。