2014-06-27 19 views
8

Pracuję nad aplikacją dla systemu Android z interfejsem API Google+. Mam wiele działań, z których każda wymaga jednej instancji GoogleApiClient.Tworzenie GoogleApiClient dla wielu działań

Jak rozumiem, z this post można wywołać to samo wystąpienie GoogleApiClient dla każdego działania. Moje pytanie brzmi: w jaki sposób tworzymy kopie GoogleApiClient?

Czy tworzymy go ponownie ponownie za pomocą metod .addApi(), .addscope() i narzędzia onConnected i OnConnectedFailedListener? Ponieważ wydaje się powtarzalny i nieefektywny. I czy wdrożenie tych metod nie zastąpiłoby tych samych metod również w przypadku innych działań?

Odpowiedz

1

Właśnie miałem ten sam dylemat. Aby to obejść, użyłem BaseGameUtil ... nie jestem pewien, czy używasz tego, ale jeśli tak, to jest proste, możesz po prostu kazać każdej czynności rozszerzyć BaseGameActivity, dodać wymagane metody, a następnie stworzyć GoogleApiClient obj i getApiClient, który następnie daje ci możliwość korzystania z GoogleApiClient podczas drugiej aktywności.

mGoogleApiClient = getApiClient(); 

jeśli nie używając BaseGameUtil to myślę, że trzeba by stworzyć go tak jak ty, powyżej którego jest ból, przynajmniej basegameutil zrobi to za Ciebie, plus można zawsze zmienić Siema w BGU jako to więcej przykładów niż biblioteki.

Mam nadzieję, że to pomoże.

12

Tworzenie wielu wystąpień GoogleApiClient nie jest drogie. W rzeczywistości pomoże to w wydajności, jeśli użyjesz więcej niż jednego API. Tylko usługi, o które prosisz, zostaną udostępnione. Jeśli więc jedno działanie wykorzystuje Plus, a drugie korzysta z Dysku, usługa Plus nie musi być buforowana, gdy korzystasz z Dysku.

Aby było jasne, zaleca się utworzenie oddzielnej instancji o wartości GoogleApiClient dla każdego działania, fragmentu, programu ładującego, usługi lub aplikacji, które tworzysz (może nawet niektórych, o których też zapomniałem).

Jeśli naprawdę nie chcesz tego zrobić, użyj kontekstu aplikacji zamiast działania lub fragmentu, aby utworzyć GoogleApiClient i zachować odniesienie do niego w obiekcie aplikacji.

+0

Zastanawiam się nad tym, aby zachować odniesienie do GoogleAiClient w utworze statycznym i ścieżkowym w kolejce komunikatów z kilku różnych miejsc w mojej aplikacji (tj. Z działania lub usług w wyniku otrzymania wiadomości Push). Czy możesz wymyślić jakieś czerwone flagi w utrzymywaniu statycznego odniesienia do GoogleApiClient, używając kontekstu aplikacji? Wydaje się, że niewiele różni się od trzymania go w obiekcie Application. –

+0

Korzystanie z kontekstu aplikacji wiąże się z konsekwencjami. Usługa może być kosztowna w utrzymaniu. Utrzymanie tego, gdy nie jest potrzebne, spowoduje znaczne zużycie procesora i pamięci, gdy może spowodować problemy z urządzeniami low-end i może spowodować zamknięcie aplikacji w tle. Utrzymywanie odniesienia do tego powiązanego z kontekstem aplikacji jest z tych powodów niezadowolone. Jeśli mimo wszystko zamierzasz to zrobić, nie ma znaczenia, czy przechowujesz je w obiekcie Application, czy w innym singletonie. – Hounshell

+0

Dzięki za szybką reakcję! Zdałem sobie sprawę, że mogę używać blockingConnect na GoogleApiClient i ponieważ robię całą moją pracę w wątku w tle, sądzę, że mogę po prostu użyć metody blockingConnect na GoogleApiClient, zarejestrować moje geofences (zakładając pomyślny wynik na blockingResult) i odłączyć zaraz po. Czuję się lepiej, robiąc to w ten sposób, zamiast utrzymywać klienta i kontekst na zawsze. –

Powiązane problemy