Firebase Android: событие onDataChange() всегда выполняется в главном потоке пользовательского интерфейса?
В приложении Android, использующем Firebase, мне нужно выполнить длинные операции в фоновом режиме, как только Firebase вернет ответ на запрос. Например:.
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot data) {
dosomething very long. . .
then call a callback forUI thread
}
Я знаю, что firebase выполняет запрос в асинхронном режиме, но метод onDataChange()
, кажется, всегда выполняется в основном потоке пользовательского интерфейса, даже если я пытаюсь вызвать запрос в настраиваемом фоновом потоке.
Кто-нибудь знает, как управлять этим прецедентом?
Ответы
Ответ 1
Обратные вызовы для ваших слушателей Firebase действительно выполняются в основном потоке пользовательского интерфейса.
Если вам нужно выполнить тяжелые операции в обратном вызове, разверните AsyncTask
и выполните там работу. Метод AsyncTask.doInBackground()
выполняется в другом потоке, поэтому он не будет блокировать пользовательский интерфейс Android. Но AsyncTask. onPostExecute()
снова запускается в основном потоке, поэтому вы можете обновить свои представления пользовательского интерфейса.