为什么在 Room 数据库中,Room.databaseBuilder 函数需要使用 context 作为参数?

6
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。

  1. 我应该传递什么参数?
  2. 如果我传入Activity上下文或应用程序上下文会有什么不同?
1. 您应该传递一个有效的上下文对象,以便Room可以在其中执行操作。通常使用Activity或Application上下文。
2. 如果您传递了Activity上下文,则数据库实例将绑定到Activity的生命周期,并在Activity销毁时关闭。如果您传递应用程序上下文,则数据库实例将一直存在,直到应用程序完全退出。建议使用应用程序上下文来避免内存泄漏。
1个回答

0
在Android中,Room.databaseBuilder()函数用于创建Room数据库的实例。它需要一个上下文作为参数,有几个原因:
  1. 创建数据库实例。 Room使用上下文在应用程序的数据库目录中创建数据库实例。
  2. 访问数据库文件。 Room使用上下文访问存储在应用程序的内部存储中的数据库文件。
  3. 为其他组件提供对数据库的访问。 Room使用上下文为应用程序的其他组件(如DAO和ViewModel类)提供对数据库的访问。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接