Firebase Android:onDataChange() 事件总是在 Main UI 线程中执行?

Firebase Android: onDataChange() event always executed in Main UI Thread?

在使用 Firebase 的 Android 应用程序中,我需要在 Firebase returns 查询答案后在后台执行长时间操作。例如:

query.addListenerForSingleValueEvent(new ValueEventListener() {
   @Override
   public void onDataChange(DataSnapshot data) {
         dosomething very long. . .
         then call a callback forUI thread
   }

我知道 firebase 以异步模式执行查询,但 onDataChange() 方法似乎总是在主 UI 线程中执行,即使我尝试在自定义后台调用查询线。

有人知道如何管理这个用例吗?

您的 Firebase 侦听器的回调确实在主 UI 线程上执行。

如果您需要在回调中执行繁重的操作,请启动 AsyncTask 并在那里完成工作。 AsyncTask.doInBackground() 方法在不同的线程上执行,因此它不会阻塞 Android UI。但是 AsyncTask. onPostExecute() 再次在主线程上执行,因此您可以从那里更新 UI 视图。

如果您使用的是 Cloud Firestore,请参阅了解如何在后台线程上获取回调。

可能来晚了一点,但如果你想在后台线程上 Firebase 到 return 回调,你可以使用 BACKGROUND_EXECUTOR 来自 [=14] =] 喜欢

.addOnCompleteListener(BACKGROUND_EXECUTOR, OnCompleteListener<Void> {
   ...
}

还有其他执行者-

DEFAULT_CALLBACK_EXECUTOR
DIRECT_EXECUTOR