我试图了解Android上Firebase的离线功能到底有多远.
据我所知,应该可以使数据库"持久" FirebaseDatabase.getInstance().setPersistenceEnabled(true);
文件内容如下:
Firebase实时数据库存储从查询返回的数据,以便在脱机时使用.对于在脱机时构建的查询,Firebase实时数据库将继续为以前加载的数据工作.如果未加载请求的数据,Firebase实时数据库将从本地缓存加载数据.当我们重新上线时,我们的数据将加载并反映查询.
当离线状态被强迫时,这也是真的goOffline
吗?
在这个问题中,用户得到了firebase支持的答案:
虽然您可以使用goOffline()强制客户端长时间离线,但性能会随着时间的推移而恶化.Firebase客户端将对中间状态更改进行排队,而不是像服务器那样更新存储状态.
这是否意味着"本地数据库"实际上没有像因连接丢失而离线时更新?
因为大多数时候任何查询或值事件监听器都没有返回,所以onDataChange永远不会被调用为onCanceled(我已经检查过!)
如果只有连接丢失,它实际上就像宣传的一样,虽然有时会有一分钟的延迟,这本身就是一个问题.
goOffline()
如果这只是完全停止与数据库的交互,那么甚至提供该方法的意图是什么?
在我的实现中,应用程序启动脱机,具有匿名身份验证.所以在开始的时候,"本地数据库"将是完全空的.但是,值事件至少应该使用空数据快照触发onDataChanged吗?
我尝试保持在线状态,直到收到匿名UID并在firebase数据库中添加一个空条目,然后查询/缓存.之后,如果我打电话goOffline
,就不能再添加条目,也不会再回答任何查询.
与上面提到的问题类似,我的计划是为用户提供保持离线的选项,当然还有在本地缓存中建立存储的写事件的缺点(但这不应该是一个大问题.没有那么多数据)
那么即使可能,我怎样才能完成这项工作呢?
我唯一能看到的是在开始时为实际的离线功能提供一些不同的数据库解决方案,当用户选择上线时,必须将其转换并转移到firebase.