2014-06-27 5 views
8

Ich entwickle eine Android App mit Google+ API. Ich habe mehrere Aktivitäten, die jeweils eine Instanz von GoogleApiClient erfordern. Wie ich aus this post verstehe, ist es möglich, dieselbe Instanz von GoogleApiClient für jede Aktivität aufzurufen. Meine Frage ist, wie erstellen wir speziell Kopien des GoogleApiClient?Erstellen von GoogleApiClient für mehrere Aktivitäten

Erstellen wir wieder eine mit dem .addApi(), .addscope() und implementieren onConnected-Methode und OnConnectedFailedListener-Methode erneut? Weil es sich wiederholend und ineffizient scheint. Und würden diese Methoden nicht die gleichen Methoden von anderen Aktivitäten überschreiben?

Antwort

1

Ich habe gerade das gleiche Dilema gehabt. Um das zu umgehen, habe ich das BaseGameUtil verwendet ... nicht sicher, ob Sie das verwenden, aber wenn es dann einfach ist, können Sie einfach jede Aktivität erweitern, die erforderlichen Methoden hinzufügen und dann ein GoogleApiClient-Objekt und einen GetApiClient erstellen geben Sie die Möglichkeit, den GoogleApiClient in Ihrer zweiten Aktivität zu verwenden.

mGoogleApiClient = getApiClient(); 

Wenn Ihr nicht die BaseGameUtil verwenden, dann denke ich, Sie würden es schaffen haben, wie Sie über dem tun ein Schmerz ist, zumindest die basegameutil es für Sie tut, und man kann immer was in der BGU ändern Sie sind mehr Beispiele als Bibliotheken.

Hoffe, das hilft.

12

Es ist nicht teuer, mehrere Instanzen von GoogleApiClient zu erstellen. In der Tat wird es mit Effizienz helfen, wenn Sie mehr als nur eine API verwenden. Nur die von Ihnen speziell angeforderten Dienste werden hochgespielt. Wenn eine Aktivität Plus verwendet und eine andere Google Drive verwendet, muss der Plus-Dienst nicht hochgespielt werden, wenn Sie sich in der Google Drive-Aktivität befinden.

Um es klar zu sagen, es wird empfohlen, dass Sie eine separate Instanz von GoogleApiClient für jede Aktivität erstellen, Fragment, Loader, Service oder Anwendung, die Sie erstellen (vielleicht sogar einige andere, die ich auch vergessen).

Wenn Sie das wirklich nicht möchten, verwenden Sie den Anwendungskontext anstelle einer Aktivität oder eines Fragments, um die GoogleApiClient zu erstellen und einen Verweis darauf in einem Anwendungsobjekt zu halten.

+0

Ich überlege, meine Referenz auf GoogleApiClient in einem statischen und Trichter arbeiten in einer Nachrichtenwarteschlange von mehreren verschiedenen Orten in meiner App (z. B. von einer Aktivität oder von Services als Ergebnis des Empfangens einer Push-Nachricht) zu halten. Können Sie unter Verwendung des Anwendungskontexts an irgendwelche roten Fahnen denken, wenn Sie einen statischen Verweis auf GoogleApiClient beibehalten? Es scheint ein wenig anders zu sein, als es im Application-Objekt zu behalten. –

+0

Die Verwendung von Anwendungskontext hat Auswirkungen. Der Service kann teuer in der Wartung sein. Wenn Sie dies nicht benötigen, führt dies zu einer erheblichen zusätzlichen CPU- und Speicherauslastung, wenn Probleme mit Low-End-Geräten auftreten können und die App im Hintergrund geschlossen wird. Es ist aus diesen Gründen verpönt, einen Verweis darauf zu halten, der an den Anwendungskontext gebunden ist. Wenn Sie das trotzdem tun, spielt es keine Rolle, ob Sie es im Application-Objekt oder in einem anderen Singleton speichern. – Hounshell

+0

Danke für die schnelle Antwort! Ich erkannte, dass ich blockingConnect auf GoogleApiClient verwenden kann und da ich meine ganze Arbeit in einem Hintergrundthread mache, kann ich einfach blockingConnect auf GoogleApiClient verwenden, mich für meine Geofences registrieren (unter der Annahme eines erfolgreichen Ergebnisses auf blockingResult) und die Verbindung sofort trennen. Ich fühle mich besser, es auf diese Weise zu tun, als den Klienten und den Kontext für immer zu behalten. –