我正在测试一项功能,该功能需要每天午夜进行Firebase数据库写入。现在有可能在此特定时间,客户端应用程序可能无法连接到互联网。
我一直在使用Firebase并保持关闭,因为这可能会导致我的另一个功能中的陈旧数据问题。
根据我的观察,如果我在写入之前断开应用程序并保持这种方式一分钟左右,当我再次打开连接并执行写入时,Firebase最终会重新连接。
我的主要问题是:
即使连接丢失了几个小时,这种行为也会保持一致吗?
Firebase会超时吗?
由于它位于永久运行的服务中,它是否仍需要持久性以确保写入不会丢失? (假设服务没有重启)。
如果服务重新启动,写入是否会丢失?
答案 0 :(得分:1)
我对这个确切的案例有一些经验,我实际上不建议使用后台服务来管理您的Firebase请求。实际上,我不建议完全管理Firebase请求(稍后解释)。
服务,即使我们可以让它们永远运行,实际上也会被系统杀死很多(除非你将它们的CPU优先级设置为更高的级别,但即使这样,系统仍然会杀死它们)。 p>
如果您拨打Firebase写入电话(任何类型),并且您的服务被终止,写入将会丢失,如您所说。除非,您创建了一个复杂的管理器,您可以在其中存储尚未提交到内部存储的请求,并在每次重新启动服务时加载它们 - 但考虑到Firebase开发人员这一事实,这是一项非常肮脏的工作。照顾我们并制作.setPersistenceEnabled(true)
:)
我知道,你提到你不想使用它,但我强烈建议你这样做。它的工作方式就像魅力一样,无需任何服务,您无需担心管理写入请求。也许最好解决你所拥有的另一个问题,以便实现这一目标。
总结一下,这就是我要做的事情:
.setPersistenceEnabled(true)
(扩展Application
类,建议从onCreate()
调用它)BroadcastReceiver
以在午夜收到警报(重复或不重复 - 您决定)确保我涵盖了您的所有问题:
这种行为会保持一致......
没有。案例场景:午夜时间,您的服务已成功接听电话,现在正在尝试写入Firebase。例如,如果用户在上午6点之前没有连接(只是一个案例场景),那么系统很可能会在这6个小时内将其终止,并且您的写入将会丢失。飞行时间,或停留在没有互联网覆盖的区域 - 这两个都是可能破坏应用程序一致性的风险场景的例子
Firebase会超时吗?
如上所述,它绝对可以。我不会承担风险并制作一个80-90%的工作应用程序。使用持久性并拥有100%正常工作的应用程序:)
我相信我已经涵盖了其他问题......
祝你好运!