2016-09-07 22 views
7

Mam aplikację na Androida, do której przesyłam dane do fragmentu. Wierzę, że Firebase zarządza asynchronicznymi połączeniami. Ale wciąż mam wątpliwości, czy musimy napisać kod Firebase w wątku tła, czy nie ?.Czy musimy używać wątku tła do pobierania danych za pomocą firebase?

Jeśli potrzebujemy napisać go w wątku tła, możesz powiedzieć, które operacje zabierają więcej czasu. np:

mDatabase = FirebaseDatabase.getInstance().getReference().child("Blog"); 

Myślę, że wykonanie tego w głównym wątku UI może być pełne ryzyko, ponieważ ustawienie połączenia między bazą danych może kiedyś zająć dużo czasu.

+1

Nie trzeba używać żadnego wątku dla bazy FireFase –

+0

To wydaje się być pytanie, na które można odpowiedzieć, czytając dok. –

Odpowiedz

11

Klient bazy danych Firebase wykonuje wszystkie operacje sieciowe i dyskowe, aby usunąć główny wątek.

Klient bazy danych Firebase wywołuje wszystkie wywołania zwrotne do kodu na główny wątek.

Tak więc dostęp do sieci i dysku dla bazy danych nie jest powodem do zakręcania własnych wątków lub korzystania z zadań w tle. Ale jeśli wykonasz operacje dyskowe, operacje wejścia/wyjścia sieci lub procesora w oddzwanianiu, może zajść potrzeba wykonania ich poza głównym wątkiem.

0

Firebase uruchamia wszystkie swoje oddzwonienia asynchronicznie zgodnie z dokumentacją https://www.firebase.com/docs/android/guide/retrieving-data.html. Odbywa się to za pośrednictwem warstwy gniazd internetowych.

Jeśli na przykład trzeba wykonać duże przetwarzanie danych na podstawie aktualizacji danych Firebase - prawdopodobnie należy zakodować AsyncTask, aby zapobiec blokowaniu interfejsu. Nie różni się to niczym od podejścia do przetwarzania danych przed zaprezentowaniem go w interfejsie użytkownika.

Dokumentacja Firebase opisuje sposób obsługi danych i powód, dla którego nie trzeba wykonywać żadnych odczytów w tle. Powinieneś prawdopodobnie poświęcić trochę czasu na czytanie dokumentacji.

1

Jeśli wyciągasz dużą zbiór danych z bazy danych i chcesz przekonwertować to wszystko na kolekcję typu JavaBeans, możesz odrzucić to na inny wątek, ponieważ rozmiar używanych danych refleksji może spowodować zbyt dużo pracy dla głównego wątku. Jedynym sposobem, aby dowiedzieć się o tym na pewno, jest przeprowadzenie testu porównawczego. Ogólnie rzecz biorąc, masz 16ms, aby robić rzeczy na głównym wątku, zanim zaczniesz spadać z optymalnej prędkości renderowania 60 klatek na sekundę.

Niedawno napisałem tweeta o projekcie dotyczącym mojego projektu, w którym odtworzyłem wzorzec wysyłania programu nasłuchującego bazę danych do executora w celu przetworzenia w tle. Jednak Twoja aplikacja może nie wymagać tego rodzaju złożoności. To było dobre dla mojej aplikacji. https://twitter.com/CodingDoug/status/773277680867258368

+0

Byłoby miło, gdyby Firebase dostarczyło sposób wykonywania tych wywołań z głównego wątku. Dzięki za informację w tym tweecie. – Sotti