首页 > 解决方案 > 使用 Room.inMemoryDatabaseBuilder() 的完美用例是什么?

问题描述

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

为内存数据库创建 RoomDatabase.Builder。当进程被杀死时,存储在内存数据库中的信息会消失。建立数据库后,您应该保留对它的引用并重新使用它。

我想知道这是否适合我的情况。由于数据将仅存在于内存中,而不会存储在设备中。

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

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

非常感谢。

标签: androidandroid-roomandroid-architecture-components

解决方案


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

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

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

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

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

  3. 如果设备使用SafetyNet api植根,则阻止应用程序的某些敏感部分

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


推荐阅读