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() снова запускается в основном потоке, поэтому вы можете обновить свои представления пользовательского интерфейса.