【问题标题】:When should I build the room database instance?我应该什么时候构建房间数据库实例?
【发布时间】:2020-01-16 13:00:13
【问题描述】:

第一次发布问题,我是一个编码新手,如果我做错了什么,很抱歉。

我查了一下,发现了一个与我的问题有点相似的答案:When / How to Create / Destroy Room Database

不过我没用匕首,也不知道怎么用。

我想问你应该什么时候建立你的房间数据库实例?假设我的应用程序始终使用数据库,我应该在主活动的 OnCreate 中构建它吗?还是应该只在用户尝试访问某些需要它的功能时才构建它?

这是有问题的代码:

instance = Room.databaseBuilder(context.getApplicationContext(), MovieDatabase.class, DB_NAME).build();

那么基本上什么时候是运行上述代码的最佳时间?

如果这个问题没有意义,请告诉我。

【问题讨论】:

  • Or should I only build it once the users tries to access some functionality that requires it? 可能是这个。它可以防止将资源分配给它直到它实际上是需要的。但这取决于您的情况:)另外,欢迎堆栈溢出
  • 不要忘记对 Singleton 使用双重检查锁定。
  • @a_local_nobody 谢谢,这是我一直在寻找的答案。不知道如何将其标记为正确
  • 好吧,我只是回复评论,所以您不能将其标记为答案:D

标签: android android-room


【解决方案1】:

build 本身不会打开/连接数据库,因此不会占用大量资源,因此可以在任何地方完成。可能,一般来说,最好的地方是在 MainActivity 中构建。

直到您真正尝试对数据库执行某些操作(插入/更新/删除/查询),然后才完成打开/连接,这可能是相对资源密集型的。因此,为什么默认情况下,Room 不允许你在主线程上做任何事情(在构建时使用.allowMainThreadQueries,可以用来覆盖这个限制)。

您可以强制打开/连接,例如通过使用 SupportSQLiteDatabase。例如,theBuiltDatabase.openHelper.writableDatabase(表示已部分构建的数据库的BuiltDatabase)(这可以在主线程上运行,而与allowMainThreadQueries无关)。但是,您可能不想这样做。

【讨论】:

    【解决方案2】:

    您的数据库Instance 将构建为Singleton,您可以在任何地方访问它,因为它只会创建一次。

    请关注codelab tutorial,了解如何使用 Room

    【讨论】:

      【解决方案3】:

      创建一个应用程序类,您将在其中创建它的单例对象。您可以通过这个example。它解释了您的所有要求。

      【讨论】:

        猜你喜欢
        • 2011-06-21
        • 2011-05-31
        • 2011-01-01
        • 2014-07-09
        • 2012-01-23
        • 1970-01-01
        • 1970-01-01
        • 2016-01-31
        • 2013-04-25
        相关资源
        最近更新 更多