首页 > 解决方案 > Firebase 离线同步问题

问题描述

我最近才开始学习 Kotlin 和使用 Firebase。我只是对离线同步功能有一些疑问。对于上下文,我制作的应用程序提交信息形式(主要是布尔值,但我希望将来也有图像)。我已经完成了离线部分的设置并且已经玩过了。我只是想知道:

  1. 如果我在同步“队列”中仍有离线表单时关闭应用程序会发生什么。
  2. 这个同步队列有限制吗?例如大小、表格数量。特别是 Firebase 实时数据库的免费计划。

这是我为进行离线同步而编写的代码(用于 setOnClickListener 的“私人乐趣”:

        val ref = FirebaseDatabase.getInstance().getReference("Inspections")

        ref.keepSynced(true)

        val fdbTubingId = ref.push().key

        val inspec = Inspection(ds, fdbTubingId.toString(), uniqueID, fac, ss, tid, fType,
                              Q1Aa, Q1Bb, Q1Cc, Q1CComment,
                              Q2Aa, Q2Bb, Q2Cc, Q2Dd, Q2CComment,
                              Q3Aa, Q3Bb, Q3CAa, Q3CBb, Q3CCc, Q3CComment,
                              Q4Aa, Q4Bb, Q4Cc, Q4Dd, Q4CComment,
                              Q5Aa, Q5Bb, Q5CComment,
                              Q6Aa, Q6CComment)

        if (fdbTubingId != null) {
            ref.child(fdbTubingId).setValue(inspec).addOnCompleteListener {
                Toast.makeText(applicationContext, "Inspection saved successfully", Toast.LENGTH_LONG).show()
            }
        }

谢谢。

标签: androidfirebasekotlinfirebase-realtime-database

解决方案


默认情况下,Firebase 仅将挂起的写入保留在内存中。在该配置中,当应用程序关闭时,任何挂起的写入都会丢失。

如果启用磁盘持久性,挂起的写入(连同最近接收的数据)将持久化到磁盘。在这种情况下,挂起的写入会在应用程序重新启动时恢复到内存中。

对于挂起的写入数量没有记录或硬编码的限制。可能有一个物理限制,但它不受您所参加的计划的影响。


最后一点:如果您问这个是因为您想将 Firebase 用作半永久性离线数据库,我建议您不要这样做。挂起的写入次数线性影响启动性能,磁盘缓存的大小也会影响内存消耗。您应该确保您的 Firebase 客户端可以定期与服务器同步数据。对于纯粹的离线体验,您可能需要考虑更适合该用例的数据库。


推荐阅读