为什么 Room.databaseBuilder 函数需要上下文作为 Room 数据库中的参数?

Jae*_*ung 7 android android-context kotlin android-database android-room

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
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

上面的代码是创建房间数据库单例的一般方式。我想知道为什么 Room.databaseBuilder 函数需要上下文作为参数。我知道这个问题可能很愚蠢,因为我对 Android 中的上下文缺乏了解。

  1. 我应该在该参数中传递什么参数?
  2. 如果我传入 Activity 上下文或应用程序,会有什么不同?

小智 0

Android中的Room.databaseBuilder ()函数用于创建Room数据库的实例。出于以下几个原因,它需要上下文作为参数:

  1. 创建数据库实例。Room 使用上下文在应用程序的数据库目录中创建数据库实例。
  2. 访问数据库文件。Room 使用上下文来访问存储在应用程序内部存储中的数据库文件。
  3. 为其他组件提供对数据库的访问。Room 使用上下文为应用程序的其他组件(例如 DAO 和 ViewModel 类)提供对数据库的访问。