使用 Room.inMemoryDatabaseBuilder() 的完美用例是什么?

What is the perfect use case for using Room.inMemoryDatabaseBuilder()?

所以我创建了这个应用程序,其中有很多个人信息和数据不应保留在设备中以避免安全问题。在了解 Room 时,我遇到了这个 Room.inMemoryDatabaseBuilder(),正如文档所述:

Creates a RoomDatabase.Builder for an in memory database. Information stored in an in memory database disappears when the process is killed. Once a database is built, you should keep a reference to it and re-use it.

我想知道这是否是适合我的情况的完美用例。由于数据只会存在于内存中,不会存储在设备中。

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

有人可以提供一些建议吗?将不胜感激。

非常感谢。

Room.inMemoryDatabaseBuilder() 主要是为测试目的而设计的。我永远不会在生产中使用它,因为你不知道进程何时被系统杀死,所以任何超出高级结构化缓存或类似内容的使用都可能不是一个好主意。

我认为你有很多选择来解决这个问题而不依赖于这个API。

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

  1. 使用SQLCipher加密房间数据库并将其存储在应用程序私有文件夹中。

  2. 使用Android Keystore存储私人信息或访问个人信息的密码。

  3. 如果设备使用 SafetyNet api

    root,请阻止应用程序的某些敏感部分
  4. 根本不要将敏感数据存储在数据库中,只有在用户明确请求时才在运行时向服务器请求它们。

我在@Florina Muntenescu 博客中发布了同样的上下文问题here

她的回答是:

Hi, Yes, it can be used for any use case that requires the data to be kept in memory only. Testing is one of them.

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