在使用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线程中执行,即使我尝试在自定义后台线程中调用查询。
有谁知道如何管理这个用例?
答案 0 :(得分:20)
Firebase侦听器的回调确实在主UI线程上执行。
如果您需要在回调中执行大量操作,请启动AsyncTask
并在那里完成工作。 AsyncTask.doInBackground()
方法在不同的线程上执行,因此它不会阻止Android UI。但AsyncTask. onPostExecute()
再次在主线程上执行,因此您可以从那里更新UI视图。
答案 1 :(得分:0)
参加聚会可能为时已晚,但是如果您想让Firebase
在后台线程上返回通话通知,则可以像
com.google.firebase.firestore.util.Executors.BACKGROUND_EXECUTOR
>
.addOnCompleteListener(BACKGROUND_EXECUTOR, OnCompleteListener<Void> {
...
}
还有其他执行器,例如-
DEFAULT_CALLBACK_EXECUTOR
DIRECT_EXECUTOR