2014-06-27 70 views
8

我正在開發一個帶有Google+ API的Android應用程序。我有多個活動,每個活動都需要一個GoogleApiClient實例。爲多個活動創建GoogleApiClient

據我所知,從this post可以爲每個活動調用同一個GoogleApiClient實例。我的問題是我們如何專門創建GoogleApiClient的副本?

我們是否用.addApi(),.addscope()再次構建一個,並再次實現onConnected方法和OnConnectedFailedListener方法?因爲它似乎重複性和低效率。並且不會實現這些方法也會覆蓋其他活動的相同方法嗎?

回答

1

我剛剛遇到了同樣的困境。爲了解決這個問題,我使用了BaseGameUtil ......不確定你是否使用了它,但如果你很簡單,你可以讓每個活動擴展BaseGameActivity,添加所需的方法,然後創建一個GoogleApiClient obj和getApiClient,然後爲您提供在第二項活動中使用GoogleApiClient的方法。

mGoogleApiClient = getApiClient(); 

如果你不使用BaseGameUtil的話,我想你會喜歡你做上面這是一種痛苦,至少basegameutil會爲你創造它,再加上你可以隨時改變什麼在BGU作爲他們比圖書館更多的例子。

希望這會有所幫助。

12

創建GoogleApiClient的多個實例並不昂貴。事實上,如果您使用的不僅僅是一個API,它將有助於提高效率。只有您特別要求的服務纔會被註冊。因此,如果一項活動使用Plus,另一項使用雲端硬盤,則在雲端硬盤活動時,不必將雲服務加速。

爲了清楚起見,建議您爲創建的每個活動,片段,加載程序,服務或應用程序創建一個單獨的GoogleApiClient實例(可能甚至還有一些我已經忘記的實例)。

如果您確實不想這樣做,請使用應用程序上下文而不是活動或片段來創建GoogleApiClient並在Application對象中保存對它的引用。

+0

我正在考慮將我的引用保留在GoogleApiClient的一個靜態和漏斗工作中,從我應用程序中幾個不同位置(即:從Activity或從接收推送消息的結果的服務)的消息隊列中進行。你能想到使用應用程序上下文來保持靜態引用GoogleApiClient的任何紅旗嗎?它與將它保留在Application對象中似乎有點不同。 –

+0

使用應用程序上下文會帶來影響。該服務維護起來可能很昂貴。如果在不需要它的時候保持這種狀態,會導致大量額外的CPU和內存使用,這可能會讓您在低端設備上遇到問題,並且更可能導致您的應用在後臺關閉。由於這些原因,保留與應用程序上下文相關的引用是不受歡迎的。如果你打算這樣做,將它存儲在Application對象或其他單例中並不重要。 – Hounshell

+0

感謝您的快速響應!我意識到我可以在GoogleApiClient上使用blockingConnect,因爲我在後臺線程中完成所有工作,我想我可以在GoogleApiClient上使用blockingConnect,註冊我的geofences(假設阻塞結果成功),然後立即斷開連接。我更喜歡這樣做,而不是永遠保持客戶和環境。 –