0

我目前正在构建一个使用 Firebases 实时数据库作为后端的 Android 应用程序。我观察到,第一次获取节点的子节点需要更长的时间,所以我假设 Firebase 使用本地数据库。但是,如果应用程序被杀死(即使启用了持久性),本地文件似乎也会被删除。

我想使用 Stetho 检查本地数据库,但在 chrome 开发人员工具中显示的本地数据库中找不到数据。

有没有办法查看本地数据库的样子?即使应用程序被杀死,是否有可能保留数据?

4

1 回答 1

0

tl; dr:您可能尚未启用磁盘持久性

第一次从数据库读取时会发生什么

当您的应用首次连接到 Firebase 时,会发生以下情况:

  1. 第一次检索数据时,Firebase 会在客户端和服务器之间建立连接。这需要的时间取决于客户端和服务器之间的路径,但通常是几秒钟。

  2. 如果您使用身份验证,则此初始“握手”还包括让用户登录或刷新他们的令牌。

  3. 然后 Firebase 会检索您请求的数据。这花费的时间主要取决于您请求的数据量和客户端设备的带宽。

如果这些步骤,步骤 3 通常需要最少的时间。然而,当您请求其他数据时,Firebase 客户端只需执行第 3 步,因为它在调用之间保持其连接和身份验证状态。

Firebase 缓存数据的位置

默认情况下,Firebase 将您正在积极监听的数据保存在内存中。如果您为相同的数据附加第二个侦听器,则该侦听器会从内存中获取数据的副本。所以在这种情况下读取是即时的,因为甚至不需要之前的第 3 步。

当您分离特定数据的所有侦听器时,Firebase 会立即将其从内存中刷新。所以这意味着下次你附加一个监听器时,它必须重新读取数据(上面的第 3 步)。

如果您启用磁盘持久性,Firebase 客户端还将接收到的任何数据的副本存储到磁盘。这是一个所谓的 MRU 缓存,因此它只包含最近的数据,并且在您的应用程序重新启动之间保持不变。但这只有在您启用了持久性时才会发生。

本地磁盘缓存所在的位置

本地磁盘缓存是一个常规的 sqlite 数据库。如果您有兴趣查看它以进行调试,它(至少对我而言)存在于/data/data/{applicationId}/{applicationId}_default. 它是一个 sqlite 数据库。但是格式没有记录,所以你自己找出里面的任何东西。

另见:

于 2017-10-20T13:53:00.910 回答