2014-06-27 24 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(假设阻塞结果成功),然后立即断开连接。我更喜欢这样做,而不是永远保持客户和环境。 –