【问题标题】:Firebase multiple query bottleneckFirebase 多查询瓶颈
【发布时间】:2018-11-06 03:29:37
【问题描述】:

我有 ViewPager,它包含 2 个不同的片段。在这两个片段中,我都尝试使用addValueEventListener 查询firebase 数据库。这是参考 -

public static DatabaseReference getDatabase() {
    if (mDatabase == null) {
        FirebaseDatabase.getInstance().setPersistenceEnabled(true);
        mDatabase = FirebaseDatabase.getInstance().getReference();

    }
    return mDatabase;
}

在第一个 Fragment 有大约 500 多个项目(加载大约需要 8 秒),第二个有大约 20-30 个。问题是第二个片段总是等待第一个片段完成,然后再查询第二个片段。有没有办法让我分开或做点什么?我真的需要第二个Fragment 来更快地加载。提前致谢。

【问题讨论】:

  • 真的需要一次性查询500+条吗?作为用户,我会因为必须等待那么长时间才能加载项目而感到沮丧 - 你应该考虑某种分页。
  • @MarkKeen 我相信 firebase 不支持分页,关于如何处理它的任何想法/来源?
  • 使用Query,您可以使用startAtendAtlimitToFirst()limitToLast() 等。做完整列表应该不难 - firebase.google.com/docs/reference/android/com/google/firebase/… - 我会尝试谷歌搜索,因为我确信这个问题已经解决了很多次。
  • 据我所知,Firebase 调用是异步的。
  • 我认为这是一个糟糕的实现,您使用 Handler 来进行延迟。我正在尝试写一个答案。但是,答案可能无法直接解决您的问题,但我会尝试建议您如何考虑设计整个 Firebase 调用。

标签: android firebase android-fragments asynchronous firebase-realtime-database


【解决方案1】:

如果我必须解决这个问题,我会认为整体情况会像 @Mark 在 cmets 中建议的那样有点不同。我会在 Firebase 上实现一个分页查询,这样我就不必一次获取所有 500 多行。

除此之外,我还想离线存储从 Firebase 获取的数据。因此,每次应用程序加载时,数据都会填充到之前获取的两个片段中。我将在后台异步运行查询,用户不必等待查询完成即可查看两个片段中的数据。一旦查询完成加载,我将使用新获取的数据相应地更新视图,同时更新本地缓存,下次启动应用程序时将需要该缓存来提供数据。

如果您对在后台加载数据并显示缓存中的初始项目不感兴趣并坚持当前的实现,那么我想建议您,从包含 ViewPager 的活动中管理所有这些事情.只要使用BroadcastReceiver或类似的东西从Firebase接收到结果,就可以一个接一个地执行查询,或者异步执行,然后将结果发布到片段中。

希望对您有所帮助!

【讨论】:

    猜你喜欢
    • 2019-02-25
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多