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?
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. –
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
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. –