6

Mam jedną pojedynczą główną czynność, w której tworzę dynamicznie Strony wewnątrz ViewPagera (przez FragmentPagerAdapter). Jak na razie dobrze.Wiązanie i odszyfrowywanie usługi Android do/z Fragmentu (w ViewPager)

Teraz mam Service-Implementation Chcę, aby ta aktywność/te fragmenty były powiązane. I właśnie o to pytam, która jest najlepszą praktyką.

  1. Powiązanie z działaniem i przekazanie fragmentu do usługi za pośrednictwem wywołania zwrotnego za pośrednictwem działania? (binding/unbinding in onCreate()/onDestroy())
  2. Powiązanie z każdym fragmentem podczas tworzenia i rozpinania po zniszczeniu? (tak jak powyżej)

Obie implementacje działają. Ale drugi oferuje prostszą komunikację z usługą.

Podczas testowania drugie fragmenty są przypisywane do usługi podczas tworzenia. Ale kiedy usuwam wszystkie oprócz jednego, wydaje się, że nie są zniszczone. Kiedy zaczynam tworzyć od tego momentu fragmenty (tylko 1 fragment po usunięciu innych), wiązanie z serwisem ma miejsce tylko wtedy, gdy tworzę więcej fragmentów niż wcześniej.

Być może ponownie, aby uzyskać lepszy przegląd.

  • tworzyć aktywności z jednego fragmentu z pagera: usługi związane z fragmentem
  • utworzyć 2 kolejne fragmenty w pagera: usługa conntected każdego tworzenia
  • usunięcie wszystkich z wyjątkiem jednego fragmentu: niewiążące nie wydaje się być nazywany
  • utworzyć 2 kolejne fragmenty jeszcze: usługa nie wydaje się być związany
  • utworzyć inny fragment o usługi conntected na tworzenie

Czy to zachowanie można się spodziewać? Czy to jest realizacja, którą powinienem wybrać; oczywiście prostsza komunikacja jak w przypadku komunikacji zwrotnej?

Dzięki za twój wkład z góry!

+3

Zbudowałem podobny scenariusz przy użyciu twojego pierwszego podejścia (aktywność zarządza komunikacją do usługi) i działało całkiem nieźle. To pozwala mi dzielić połączenie usługowe we wszystkich fragmentach i umożliwiać fragment "więcej" natychmiastowego dostępu do usługi (bez konieczności radzenia sobie z asynchronizacją wiązania). – roostertech

Odpowiedz

4

Preferuję pierwszą metodę, szczególnie jeśli korzystasz z usługi lokalnej, ponieważ masz do niej dostęp.

Załóżmy, że Twoja aktywność ma już odniesienie do Twojej usługi lokalnej o nazwie "MyLocalService" (Checkout the Local Service Example). Następnie z poziomu twojego fragmentu możesz łatwo wywołać coś takiego: getActivity(). GetMyLocalService(). Dobrą rzeczą jest to, że twój fragment nie musi zajmować się cyklem życia usługi. Mam nadzieję że to pomoże.

+1

Tak, pomaga! ;) Sądzę, że moje myśli nie były zbyt skomplikowane. Świadczenie usługi za pośrednictwem getActivity(). GetMyService() zrobi lewę i zapobiegnie możliwym wspomnianym błędom z powiązaniem asynchronicznym. – mauricemoss