我们是否需要使用后台线程来使用firebase检索数据?

时间:2016-09-07 12:02:09

标签: android multithreading firebase firebase-realtime-database

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

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

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

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

3 个答案:

答案 0 :(得分:20)

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

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

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

答案 1 :(得分:1)

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

我最近发布了一个关于我的项目的差异,我重构了一个模式,用于将数据库侦听器发送到Executor进行后台处理。但是,您的应用可能不会要求这种复杂性。不过,这对我的应用程序来说很好。 https://twitter.com/CodingDoug/status/773277680867258368

答案 2 :(得分:0)

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

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

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