【问题标题】:Invoking Firebase listener to run调用 Firebase 监听器运行
【发布时间】:2018-02-26 20:04:03
【问题描述】:

我正在尝试确定是否在我的 Android 应用程序中下载数据。我可以通过使该方法在下载数据时返回 true 来做到这一点,但是在所有其他代码完成运行之前似乎不会调用侦听器(这意味着它会一直等到代码暂停)。所以我想知道是否有一种“强制”调用这些监听器的方法?也许通过在不同的线程中创建侦听器?这会奏效还是浪费时间?我已经尝试在主线程上睡几秒钟,但这似乎也没有做到。如果它不起作用,你能解释一下这些监听器是什么时候被调用的吗?提前致谢。

补充一下我的问题,我没有使用实时数据库。我了解实时触发器的工作原理,但我使用的是 Firestore,所以我只获取一次数据,而不是获取实时更新 :)

【问题讨论】:

  • 不要在主线程上休眠。那只是阻止处理。将您的“所有其他代码”(似乎阻止侦听器回调)放到另一个线程上。
  • 好的,谢谢!我明天会试试这个,让你知道它是如何工作的。感谢您的评论

标签: android firebase google-cloud-firestore event-listener


【解决方案1】:

正如您已经注意到的那样,处理读取和写入数据的 API 调用完全是 asynchronous。这意味着调用总是立即返回,而不会阻塞代码等待结果。结果会在一段时间后出现,只要他们准备好了,因为这可能需要一些时间。根据您的连接速度和状态,可能需要几百毫秒到几秒钟才能获得该数据。所以 Firebase 已经在使用另一个线程(除了主线程)来完成工作。

在应用的主线程上调用同步函数可能会无限期地冻结应用,这是一种糟糕的用户体验。在 Android 上,它还可能出现应用程序无响应 (ANR) 对话框软崩溃。

Doug Stevenson 在他的 post 中解释了您需要了解的有关 Fireabse 异步行为的所有信息,以及在处理 Firebase 时需要做什么/避免什么。

【讨论】:

  • 那篇文章很有帮助。它确实帮助我理解了异步调用的完整概念。感谢您提供链接!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
  • 1970-01-01
  • 2019-05-25
  • 2017-10-03
  • 2014-12-13
相关资源
最近更新 更多