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
在使用 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