【问题标题】:Creating GoogleApiClient for multiple activities为多个活动创建 GoogleApiClient
【发布时间】:2014-06-27 15:11:18
【问题描述】:

我正在使用 Google+ API 开发一个安卓应用。我有多个活动,每个活动都需要一个 GoogleApiClient 实例。

据我从this post 了解到,可以为每个活动调用同一个 GoogleApiClient 实例。我的问题是我们如何专门创建 GoogleApiClient 的副本?

我们是否再次使用 .addApi()、.addscope() 构建一个并再次实现 onConnected 方法和 OnConnectedFailedListener 方法?因为它看起来重复且效率低下。实现这些方法不会覆盖其他活动的相同方法吗?

【问题讨论】:

    标签: java android google-api google-plus


    【解决方案1】:

    创建GoogleApiClient 的多个实例并不昂贵。事实上,如果您使用的 API 不止一种,它会有助于提高效率。只有您特别要求的服务才会被后台处理。因此,如果一项活动使用 Plus 而另一项活动使用 Drive,则当您在 Drive 活动中时,Plus 服务不必被假脱机。

    为了清楚起见,建议您为您创建的每个 Activity、Fragment、Loader、Service 或 Application(甚至可能我也忘记了其他一些)创建一个单独的 GoogleApiClient 实例。

    如果您真的不想这样做,请使用应用程序上下文而不是活动或片段来创建 GoogleApiClient 并在 Application 对象中保存对它的引用。

    【讨论】:

    • 我正在考虑将我对 GoogleApiClient 的引用保留在静态中,并在消息队列中从我的应用程序中的几个不同位置(即:来自 Activity 或作为接收结果的服务推送消息)。您能想到使用应用程序上下文保持对 GoogleApiClient 的静态引用的任何危险信号吗?这似乎与将其保存在 Application 对象中没有什么不同。
    • 使用应用程序上下文会带来一些影响。该服务的维护成本可能很高。当你不需要它时保持这个状态会导致大量额外的 CPU 和内存使用,当你在低端设备上遇到问题时,更有可能导致你的应用程序在后台关闭。由于这些原因,不赞成将其引用与应用程序上下文相关联。如果你还是要这样做,将它存储在 Application 对象或其他单例中都没关系。
    • 感谢您的快速回复!我意识到我可以在 GoogleApiClient 上使用blockingConnect,并且由于我在后台线程中完成所有工作,我想我可以在GoogleApiClient 上使用blockingConnect,注册我的地理围栏(假设blockingResult 成功)并立即断开连接。我觉得这样做比永远保留客户端和上下文更好。
    【解决方案2】:

    我也遇到了同样的困境。为了解决这个问题,我使用了 BaseGameUtil ...为您提供在您的第二个活动中使用 GoogleApiClient 的方法。

    mGoogleApiClient = getApiClient();
    

    如果您不使用 BaseGameUtil,那么我认为您必须像上面那样创建它,这很痛苦,至少 basegameutil 会为您完成,而且您可以随时更改 BGU 中的内容,因为它们是更多示例比图书馆。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-03
      • 1970-01-01
      • 2014-09-21
      • 2017-01-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多