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

标签 android android-room android-architecture-components

因此,我正在创建此应用程序,其中包含大量不应保留在设备中的个人信息和数据,以避免出现安全问题。在了解 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 加密房间数据库并将其存储在应用程序私有(private)文件夹中。

  2. 使用 Android Keystore存储私有(private)信息或密码以访问个人信息。

  3. 如果设备使用 SafetyNet 获取根权限,则阻止应用程序的某些敏感部分接口(interface)

  4. 根本不要将敏感数据存储在数据库中,而是仅在用户明确请求时才在运行时向服务器请求它们。

关于android - 使用 Room.inMemoryDatabaseBuilder() 的完美用例是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54996339/

相关文章:

android - react 原生不支持的major.minor版本52

c# - 使用 Visual Studio 2015 使用 C# 进行 Android 原生应用程序开发

android - 与 Livedata 不同,使用 Flow in Room 查询在更新表条目时不会触发刷新,但在我删除或插入条目时有效

android - 房间内存不足错误 R(OOM)

android - 使用实时数据时如何在 Android 中链接转换?

android - 添加外部库后如何构建发行版APK?

android - 暂停计时器而不破坏和重新创建 - Android

android - 子类房间实体

android - 非法状态异常 : Link does not have a NavController set

android - 我可以在我的 View 模型中创建实时数据观察器吗?还是我应该始终观察 fragment/Activity ?