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

时间:2016-03-03 16:16:45

标签: android firebase firebase-realtime-database

在使用Firebase的Android应用程序中,一旦Firebase返回查询答案,我需要在后台执行长时间的操作。 E.g:

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

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

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

2 个答案:

答案 0 :(得分:20)

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

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

答案 1 :(得分:0)

参加聚会可能为时已晚,但是如果您想让Firebase在后​​台线程上返回通话通知,则可以像BACKGROUN_EXECUTOR中的com.google.firebase.firestore.util.Executors.BACKGROUND_EXECUTOR >

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

还有其他执行器,例如-

DEFAULT_CALLBACK_EXECUTOR
DIRECT_EXECUTOR