【问题标题】:How Snapshot Listener works with offline data?Snapshot Listener 如何处理离线数据?
【发布时间】:2020-04-10 10:11:44
【问题描述】:

我正在使用适用于 Android 的 Firestore。我知道它默认启用了持久性。

这里有一些背景:

我的应用程序显示了一个笔记列表,每个笔记都与一个标签相关联。因此,在创建笔记时,我必须提供一个标签列表(在Dialog 中,以响应“选择标签”按钮),这将由Query 上的快照侦听器提供给我。由于创建笔记是单独的Activity,因此每次用户创建笔记时,都必须提供完整的标签列表。

我的问题是:

  1. 快照监听器是否足够聪明,可以每隔一段时间从缓存中获取数据,除了第一次吗? (“第一次”将在侦听器过期 30 分钟后,或者 Firestore 清除缓存以节省空间,对吗?)
  2. 频繁附加和分离侦听器有什么影响?我将侦听器附加到ActivityonStart() 并删除它onStop()。在这里,用户可以在应用程序之间切换以从其他来源复制数据以将其添加到便笺中,从而使侦听器分离/附加。这会影响我的阅读次数吗?
  3. get() 在这些情况下的表现如何? (我不喜欢这个,因为它不是实时的)

在我深入研究时,Firestore 一直让我对定价感到困惑。需要清楚地了解组件在离线数据方面的行为及其定价方面。

【问题讨论】:

    标签: android firebase google-cloud-firestore


    【解决方案1】:

    快照监听器是否足够聪明,可以每隔一段时间从缓存中获取数据,除了第一次吗? (而“第一次”将在侦听器过期 30 分钟后,或者 Firestore 清除缓存以节省空间,对吧?)

    如果您处于离线状态,是的,Firestore 将从缓存中获取所有数据。当您收听实时更新时,就会发生这种情况。另一方面,如果实时更新不是强制性的,您可以简单地使用get() 调用并指定来源,正如我在以下帖子中的回答中所解释的那样:

    关于缓存限制,请查看以下答案:

    频繁附加和分离监听器有什么影响?我在 Activity 的 onStart() 中附加了监听器,并在 onStop() 中删除了它。在这里,用户可以在应用程序之间切换以从其他来源复制数据以将其添加到便笺中,从而使侦听器分离/附加。这会影响我的阅读次数吗?

    Cloud Firestore 中的侦听器很便宜,您应该担心附加到文档的大量侦听器。附加和分离听众是继续前进的方式。正如我在以下帖子中的回答中所解释的那样,在活动被破坏之前必须分离侦听器:

    get() 在这些情况下会如何表现? (我不喜欢这个,因为它不是实时的)

    当您使用get() 时,这意味着您只获取一次数据。是 Firebase 实时数据库中addListenerForSingleValueEvent() 的通讯员。

    【讨论】:

    • if the real-time updates are not mandatory, you can simply use a get() 在这种情况下我不会得到任何数据。想象一个新用户安装应用程序,我已经编写代码从缓存中获取数据。他永远不会接收数据。
    • “在这种情况下,我不会得到任何数据。” 是的,但只有一次。 CACHE 中的选项仅在您需要强制从 CACHE 中检索数据时使用,而在用户第一次打开应用程序时使用。
    • 不,不是。 get(Source.CACHE) 永远不会联系服务器,它只会从缓存中读取数据。你到底想达到什么目标?
    • 我的理解是:1. Is snapshot listener smart enough - 不,它总是更喜欢服务器数据。 2. impact of detach/attach - 良好的编码习惯,但每次切换发生时都会花费读取。 3. get() - 适合单发操作。如果我错了,请纠正我。
    • 1.不,get() 将始终更喜欢服务器数据。将源作为参数传递,可以更改此行为。 2. 正确。 3. 再次更正。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    • 2017-09-23
    • 2016-02-14
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多