2012-02-09 17 views
5

Mamy usługę, która zajmuje się kilkoma sprawami w jednym z naszych działań. Jesteśmy nowi w Androidzie i zastanawiamy się, jaki jest idealny moment na powiązanie z tą usługą. Potrzebujemy tylko usługi dla połowy interakcji, które są możliwe za pośrednictwem działania. Więc musimy zadowolić się jedną z dwóch możliwości:Usługi Android: Bind on demand vs. Bind on #onCreate()

  • łączymy się z usługą, kiedy naprawdę potrzebują, które mogłyby dodać sporo napowietrznej implementacji mądrej
  • wiążą się z Usługą w onCreate() metoda bez narzutu sprawdzania, czy usługa jest uruchomiona, wiążąca ją na żądanie, może buforowanie żądań itp.

Jaki byłby "sposób android" tutaj? Czy działająca usługa jest bardzo obciążona, czy powinna być uruchamiana tylko wtedy, gdy jest naprawdę potrzebna? Sama usługa jest naprawdę lekka.

+1

Osobiście powiążę go w trybie onCreate. Wiązanie/rozłączanie przez cały czas wydaje się być niepotrzebne, a jeśli spojrzysz na implikacje Usług, to nie będziesz tego robić. To jest moje doświadczenie, chociaż nie jestem ekspertem od specyfiki usług. Rozejrzyj się po innych implementacjach narodów i Googles. – DecodeGnome

Odpowiedz

1

Osobiście wolę wywoływać bindService() w onCreate(), a po zakończeniu używania wywołać metodę unbindService() w onDestroy(). Powodem tego jest bindService() w rzeczywistości jest połączeniem asynchronicznym. który nie został dobrze udokumentowany w API. Kiedy wywołujesz bindService(), odwołanie do obiektu wiążącego, który dostajesz wewnątrz metody wywołania zwrotnego ServiceConnection.onServiceConnected(), nie jest natychmiast tworzone, w międzyczasie po wywołaniu bindService() i przed obiektem bindera powstaje instancja i jest gotowa do użycia . więc najbardziej odpowiednim miejscem do wywołania jest onCreate(), ponieważ zwykle nie wykonujemy zbyt wielu operacji i na tym etapie potrzebujemy natychmiast używać obiektu wiążącego.