重置 Firebase 缓存
Posted
技术标签:
【中文标题】重置 Firebase 缓存【英文标题】:Reset Firebase cache 【发布时间】:2016-08-16 19:08:13 【问题描述】:在使用 Firebase 进行开发时,我在控制台中手动添加了一条数据记录,但忘记了一个条目,导致应用程序崩溃。我已经在控制台中纠正了这个问题,但是因为我使用的是 Firebase 的数据持久性,原始数据错误仍然存在,导致再次崩溃。如果我关闭持久性,一切都很好,但缓存的存储没有被更新。有没有人遇到过这个问题并找到了解决方法?
【问题讨论】:
【参考方案1】:我也遇到过这个问题,一想到用户被困在无休止的启动时崩溃循环中,我就失眠了。
正如建议的那样,出现问题的机会是在应用启动和随后来自 Firebase 服务器的缓存更新到达之间的时间窗口内创建的。如果在此时间窗口内从缓存中读取数据,然后,如果数据恰好缺少预期值,然后,如果应用程序以假定数据不会为 nil 的方式使用数据,则应用程序崩溃.如果应用在缓存更新之前崩溃,缓存将永远没有机会更新,用户将陷入无限循环(无法从设备内存中擦除应用数据)。
到目前为止,我已经通过更加努力地防止在启动期间调用的代码中出现 nil 值的可能性来处理这个问题。如果检查了 nil 并且发现不方便,则根据情况,或者 (1) 如果可能并且如果它不会导致进一步的数据损坏,则应用程序用适当的值代替 nil,或者 (2) 应用程序进入等待模式几秒钟,然后从问题节点启动新的读取,然后重新尝试启动例程。
也许这个故事的寓意是永远不要假设一个值是非零或在预期范围内。要么在收到时验证价值,要么在预期使用时检查价值,或两者兼而有之,然后相应地处理错误。
【讨论】:
【参考方案2】:缓存应该会自动更新。由于这发生在没有后台线程的情况下,当它在主线程上调用您的代码时,我希望即使您的应用程序代码崩溃,它也会更新磁盘缓存。
但如果这没有发生,恢复良好状态的最快方法是为您的应用清除应用数据或完全卸载/重新安装。
【讨论】:
感谢弗兰克,我设法通过使 db 调用以获取正确数据为条件来解决问题。这意味着在启用缓存时最初没有发生任何事情。再次重新启动后,我可以让缓存再次同步。似乎 Firebase 正在异步刷新缓存,但这发生的速度比我的代码开始时要慢。有什么我可以添加到我的代码中来防止此类问题的吗?我正在考虑一种可能的解决方案,即在发生崩溃时关闭缓存并在数据库同步后启用持久性。以上是关于重置 Firebase 缓存的主要内容,如果未能解决你的问题,请参考以下文章
Android - 应用更新时的 Firebase 远程配置缓存