【问题标题】:Do we need to use background thread for retrieving data using firebase?我们是否需要使用后台线程来使用 firebase 检索数据?
【发布时间】:2017-01-15 02:48:36
【问题描述】:

我有一个 android 应用程序,我在其中将数据检索到片段中。而且我相信 Firebase 管理它的异步调用。但是我仍然怀疑我们是否需要在后台线程中编写 Firebase 代码?

如果我们需要将其写入后台线程,那么您能告诉我们哪些操作需要更多时间吗?例如:

mDatabase = FirebaseDatabase.getInstance().getReference().child("Blog");

我认为在主 UI 线程上执行此操作可能会充满风险,因为设置数据库之间的连接有时可能需要很长时间。

【问题讨论】:

  • firebase 不需要使用任何线程
  • 这似乎是一个您可以通过阅读文档来回答的问题

标签: android multithreading firebase firebase-realtime-database


【解决方案1】:

Firebase 数据库客户端关闭主线程执行所有网络和磁盘操作。

Firebase 数据库客户端主线程上调用您的代码的所有回调。

因此,对数据库的网络和磁盘访问不是启动您自己的线程或使用后台任务的理由。但如果您在回调中执行磁盘、网络 I/O 或 CPU 密集型操作,您可能需要自己在主线程之外执行这些操作。

【讨论】:

    【解决方案2】:

    如果您要从数据库中提取大量数据,并且希望将其全部转换为 JavaBean 类型的集合,您可能希望将其卸载到另一个线程,因为它使用的数据大小相同反射可能会导致主线程工作过多。确定这一点的唯一方法是自己进行基准测试。一般来说,在你开始从每秒 60 帧的最佳渲染速度下降之前,你有 16 毫秒的时间在主线程上做事。

    我最近在推特上发布了一个关于我的一个项目的差异,在该项目中我重构了一个模式,用于将数据库侦听器发送到 Executor 以进行后台处理。但是,您的应用程序可能不需要这种复杂性。然而,这对我的应用程序有好处。 https://twitter.com/CodingDoug/status/773277680867258368

    【讨论】:

    • 如果 Firebase 提供了一种在主线程之外执行这些回调的方法,那就太好了。感谢该推文中的信息。
    • @Sotti Firebase 提供云托管服务。这不是告诉你应该如何构建你的应用程序的业务。平台框架提供者可以做到这一点,在 Android 上,你有 Jetpack,现在 Kotlin 和协程提供了一些工具。
    【解决方案3】:

    Firebase 以异步方式运行其所有回调,如 https://www.firebase.com/docs/android/guide/retrieving-data.html 所述。这是通过网络套接字层完成的。

    例如,如果您需要对 Firebase 数据更新的结果进行大量数据处理 - 您可能应该启动 AsyncTask 以防止 UI 阻塞。这与您通常在呈现给 UI 之前处理数据的方式没有任何不同。

    Firebase 文档介绍了数据的处理方式以及您不需要执行任何后台读取的原因。您可能应该花一些时间阅读文档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-14
      • 2013-10-30
      • 1970-01-01
      • 2020-07-21
      • 2011-10-21
      • 2016-11-02
      • 1970-01-01
      相关资源
      最近更新 更多