Android 使用Room.inMemoryDatabaseBuilder()的最佳用例是什么?

Android 使用Room.inMemoryDatabaseBuilder()的最佳用例是什么?,android,android-room,android-architecture-components,Android,Android Room,Android Architecture Components,因此,我正在创建一个应用程序,其中存在大量个人信息和数据,这些信息和数据不应保存在设备中以避免安全问题。在学习Room时,我遇到了这个Room.inMemoryDatabaseBuilder(),正如文档所述: 为内存中的数据库创建RoomDatabase.Builder。进程终止时,存储在内存数据库中的信息消失。一旦建立了数据库,就应该保留对它的引用并重新使用它 我想知道对于我的情况来说,这是否是一个完美的用例。因为数据将只存在于内存中,而不会存储在设备中 这似乎是个好主意。我唯一担心的是,我

因此,我正在创建一个应用程序,其中存在大量个人信息和数据,这些信息和数据不应保存在设备中以避免安全问题。在学习Room时,我遇到了这个
Room.inMemoryDatabaseBuilder()
,正如文档所述:

为内存中的数据库创建RoomDatabase.Builder。进程终止时,存储在内存数据库中的信息消失。一旦建立了数据库,就应该保留对它的引用并重新使用它

我想知道对于我的情况来说,这是否是一个完美的用例。因为数据将只存在于内存中,而不会存储在设备中

这似乎是个好主意。我唯一担心的是,我还没有在实际应用程序中看到这一点的实现。我看到这个
Room.inMemoryDatabaseBuilder()
的唯一用例是用于测试的(这样您就不必担心每次测试运行时的数据库清理)

有人能提供一些建议吗?非常感谢


非常感谢。

房间。inMemoryDatabaseBuilder()
主要用于测试目的。我永远不会在生产中使用它,因为您不知道进程何时被系统终止,因此任何超出高级结构化缓存或类似缓存的使用都可能不是一个好主意

我认为在不依赖此API的情况下,您有很多解决问题的选项

您可以使用以下一个或多个选项:

  • 使用加密文件室数据库,并将其存储在应用程序专用文件夹中

  • 使用存储私人信息或密码以访问个人信息

  • 如果设备是使用api根目录的,请阻止应用程序的某些敏感部分

  • 根本不在数据库中存储敏感数据,但只有在用户明确请求时,才在运行时向服务器请求敏感数据


  • 我在@Florina Muntenescu博客上发布了同样的背景问题

    她的回答是:

    嗨, 是的,它可以用于任何只需要将数据保存在内存中的用例。测试就是其中之一


    因此,基本上,
    Room.inMemoryDatabaseBuilder()
    可以用于数据只应保存在内存中的其他用例。

    “我唯一关心的是,我还没有在实际应用程序中看到这种实现。”
    -该实现与由物理数据库支持的数据库没有区别file@pskink对我确实理解这一点。我实际上指的是实际的用例,而不是实现细节。它们是一样的。也许简单地说,我的问题只是我所想的是否是个好主意?为什么呢?是的,这是一个好主意-如果你想保存复杂的数据并对其执行许多复杂的查询,你总是可以用大量的代码(特别是在不使用包的情况下)列出列表/地图等,但是你可以使用基于内存的房间数据库来代替它哇!你应该把它作为答案贴出来,这样我就可以标记并投票给以后的参考人了!:)接下来,使用这种方法是否也需要注意一些事情?在普通的Android设备上,你的应用程序进程将被随机终止,并将丢失内存数据库中存储的所有数据。对于我来说,这听起来不是一个好主意。实际上,我在@Florina Muntenescu博客上发布了相同的问题。。她的回答是“是的,它可以用于任何只需要将数据保存在内存中的用例。测试就是其中之一。”所以换句话说,它不仅仅是为了测试目的。@ArchieG.Quiñones我很难相信你需要大量结构化数据来证明数据库的需要,但与此同时,每次用户关闭应用程序时,都会有一些东西需要销毁和重建。可以使用带有LiveData对象的存储库类同时实现反应部分。顺便说一句,让我们继续你的想法,看看它是如何进行的。而且,没有解释地接受-1对任何人都没有帮助。我自己还没有真正实现它。这一切都在我的脑海里,我想在尝试做我想做的事情之前有更多的投入,所以这次对话确实有帮助。我否决了你的答案,因为<代码>“”仅用于测试目的。“。既然您已经编辑了答案,我将收回否决票。@MatPag检查数据库是否存在可以通过依赖项注入轻松处理。我认为这永远不会是一个问题。非常感谢您的投入!:)我会在我的一些试验项目上试用,也许将来某个时候会回来更新:)非常感谢!我喜欢这个社区,因为像你这样的人:DBe小心,因为
    Room.inMemoryDatabaseBuilder()
    不支持加载预打包的数据库。嗨,你在生产中使用过Room.inMemoryDatabaseBuilder()吗?你没有任何问题吗?我没有在产品中使用这个。。。这只是我当时的疯狂想法。。。