2011-08-17 22 views
6

Teraz główna czynność (Akt A) uruchamia usługę, która utrzymuje połączenie Bluetooth. (Wiąże usługi)Jak najlepiej wdrożyć dwie czynności udostępniania jednej usługi (połączenie Bluetooth)?

Usługa jest zmodyfikowaną wersją BluetoothChatService (Android BluetoothChat próby) ... ... modyfikowany dodany Messenger i Handler zgodnie z MessengerService (Android Remote Messenger próby)

Aktywność A zapewnia, że ​​Bluetooth jest podłączony do urządzenia zewnętrznego, a następnie uruchamia inne działanie (Akt B).

Problem polega na tym, aby usługa nadal działała i bezproblemowo obsługiwała połączenie Bluetooth z nową działalnością. Nie wiem, w jaki sposób:

  • Upewnij się, że usługa nie zostanie ponownie uruchomiony lub reinstanced, gdy przechodzi on z działalności A do B

  • Upewnij się, że funkcjonalność komunikatorami działa zgodnie z oczekiwaniami (od aktualnie aktywną)

Czy muszę ponownie powiązać usługę do nowej działalności, i jak mogę zapewnić, że połączenie BT nie jest tracona (ze względu na inny przykład of Service)? Czy muszę przekazać dalej obiekt Messenger do nowego działania, aby komunikować się z usługą tworzoną przez usługę already. Jeśli tak, jak mam to zrobić najlepiej?

Bardzo wdzięczny za odpowiedzi!

Odpowiedz

1

Podklasy Application i przechowywać informacje tam (patrz here), lub możesz uczynić swoją "usługa" singleton, więc ma statyczny element własnego typu, który zainicjować tylko, jeśli jest pusty.

6

Uczyń usługę "lepką", aby działała dalej. I stwórz podstawową klasę aktywności dla twoich 2 czynności. Podstawowa klasa aktywności może obsłużyć wszystkie typowe funkcje wiązania z usługą i zapewnić właściwą komunikację. Zdecydowanie polecam anulowanie usługi, gdy działania wstrzymują się i wiążą je w działaniach po ich wznowieniu. Ale można to zrobić raz we wspólnej aktywności klasy bazowej.

Powiązanie z usługą powinno być uruchamiane tylko wtedy, gdy nie jest jeszcze uruchomione, a po powiązaniu/anulowaniu w trybie wznowienia/wstrzymania należy w danym momencie mieć tylko jedno aktywne połączenie z usługą.

1

To jest stare pytanie, ale dzisiaj spotkałem się z tą sytuacją i wymyśliłem rozwiązanie, które działa w oparciu o inne odpowiedzi. Ponieważ nie mogłem znaleźć działającej implementacji, opublikuję ją dla innych, którzy mogą być ciekawi. Stworzyłem "lepką usługę", a następnie klasę ServiceManager, która jest odpowiedzialna za zarządzanie cyklem życia i związanie z Usługą. Następnie umieszczam klasę ServiceManager w podklasie aplikacji, aby Działania mogły uzyskać do niej dostęp w postaci globalnej. To dobrze działa. Źródło jest dostępne pod numerem GitHub.

Powiązane problemy