在 Android 上使用 Stheto 查看本地 firebase 数据库

View local firebase database with Stheto on Android

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

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

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

tl;dr:您可能还没有 enabled disk persistence

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

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

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

  2. 如果您使用身份验证,那么初始 "handshake" 还包括让用户登录或刷新他们的令牌。

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

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

Firebase 缓存数据的位置

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

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

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

本地磁盘缓存所在的位置

本地磁盘缓存是一个普通的sqlite数据库。如果您有兴趣出于调试目的查看它,它(至少对我而言)位于 /data/data/{applicationId}/{applicationId}_default 中。它是一个sqlite数据库。但是格式没有记录,所以你要自己弄清楚里面的任何东西。

另见: