火力地堡'真正的离线功能

时间:2016-08-05 19:35:31

标签: android firebase firebase-realtime-database

我试图了解Android上Firebase的离线功能到底有多远。

据我了解,应该可以使数据库"持久化"与FirebaseDatabase.getInstance().setPersistenceEnabled(true);

文档内容如下:

  

Firebase实时数据库存储从查询返回的数据,以便在脱机时使用。对于脱机时构建的查询,Firebase实时数据库将继续为以前加载的数据工作。如果未加载请求的数据,Firebase实时数据库将从本地缓存加载数据。当我们重新上线时,我们的数据将加载并反映查询。

当离线状态由goOffline强制执行时,这也是如此吗?

this question中,用户得到了firebase支持的答案:

  

虽然您可以使用goOffline()强制客户端长时间离线,但性能会随着时间的推移而恶化。 Firebase客户端将对中间状态更改进行排队,而不是像服务器那样更新存储状态。

这是否意味着"本地数据库"实际上是否因为连接丢失而离线时更新了?

因为大多数时候任何查询或值事件监听器都没有回来,onDataChange永远不会被称为onCanceled(我已经检查过了!)

如果只有连接丢失,它实际上就像宣传的一样,虽然有时会有一分钟的延迟,这本身就是一个问题。

如果只是完全停止与数据库的交互,那么甚至提供goOffline()方法的意图是什么?

在我的实现中,应用程序启动离线,并使用匿名身份验证。所以在开始的当地数据库"本地数据库"将是完全空的。但是,不应该使用空数据快照触发值数据事件吗?

我尝试保持在线状态,直到收到匿名UID并在firebase数据库中添加一个空条目,然后查询/缓存。之后,如果我拨打goOffline,则不能再添加任何条目,也不会再回答任何查询。

与上述问题类似,我的计划是为用户提供保持离线的选项,当然还有在本地缓存中建立存储的写事件的缺点(但这不应该是因为没有那么多数据而存在很大问题

那么,即使可能,我怎样才能完成这项工作?

我唯一能看到的是在开始时有一些不同的数据库解决方案,以实现必须翻译的实际离线功能。当用户选择上线时转移到firebase。

1 个答案:

答案 0 :(得分:0)

我真的不知道你想要得到什么,但是对于我的看法,如果你为你的应用程序做了一个好的设计,你可能有类似的东西,让我们想象一下,在线和离线之间它是一个开关按钮,当你在线切换时,你将使用一种方法来设置所有的监听器并启用发送更改,当你离线时,你删除你的监听器并禁止将你的变更发送到服务器,但你将它们存储在缓存中,这样当在那之后你来到网上,所有你需要做的就是把你在cach中拥有的东西推到数据库中。