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

Android 我们是否需要使用后台线程来使用firebase检索数据?,android,multithreading,firebase,firebase-realtime-database,Android,Multithreading,Firebase,Firebase Realtime Database,我有一个android应用程序,我正在将数据检索到一个片段中。我相信Firebase可以管理它的异步调用。但我仍然怀疑我们是否需要在后台线程中编写Firebase代码 如果我们需要将其写入后台线程,那么您可以告诉我们哪些操作需要更多的时间。例如: mDatabase = FirebaseDatabase.getInstance().getReference().child("Blog"); 我认为在主UI线程上执行此操作可能会充满风险,因为在数据库之间设置连接有时可能需要很长时间。Fireba

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

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

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

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

Firebase会按照文档所述异步运行其所有回调。这是通过web套接字层完成的

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


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

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


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


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

如果要从数据库中提取大量ish数据,并希望将这些数据转换为JavaBean类型的集合,您可能希望将其转移到另一个线程上,因为数据的大小及其对反射的使用可能会导致主线程的工作量过大。要确定这一点,唯一的方法就是自己对其进行基准测试。一般来说,在开始从每秒60帧的最佳渲染速度下降之前,在主线程上执行操作需要16毫秒


我最近在tweet上发布了我的一个项目的diff,我重构了一个模式,用于将数据库侦听器发送给执行者进行后台处理。但是,您的应用程序可能不需要这种复杂性。不过,这对我的应用程序有好处

Firebase不需要使用任何线程这似乎是一个可以通过阅读文档来回答的问题,如果Firebase提供了一种在主线程之外执行这些回调的方法,那就太好了。感谢您在推文中提供的信息。@Sotti Firebase提供云托管服务。这不是告诉你应该如何设计你的应用程序。平台框架提供商可以做到这一点,在Android上,您有Jetpack,现在还有Kotlin和coroutines提供的一些设施。