【问题标题】:Multiple instances of Google API Client?Google API 客户端的多个实例?
【发布时间】:2014-03-31 16:05:07
【问题描述】:

我有活动 A 实例化 GoogleApiClient、连接并开始在 AsyncTask 中进行处理,这可能需要几秒钟或几分钟。

同时,用户触发活动B,通过连接实例化它自己的 GoogleApiClient。

问题是:一个应用是否可以连接多个 GoogleApiClient 实例并同时工作,还是应该让一个应用单独使用我自己的信号量?

【问题讨论】:

    标签: google-drive-api google-drive-android-api


    【解决方案1】:

    保留任意数量的 GoogleApiClient 是完全可以的,而且这样做通常有充分的理由(片段分离、不同帐户等)。它也不是特别低效。两个客户的成本比一个客户的成本高出不到 1%。

    如果他们都试图解决错误,这可能会令人困惑,因此最好让 Fragment 客户端都忽略连接失败,并让 Activity 或应用程序级别的客户端负责解决问题。

    【讨论】:

    • 始终连接一个带有 googleApiClient 连接的服务是不是很糟糕?我有一个始终连接的 android wear 表盘服务,因此它可以从我的手表接收消息。我是否必须始终保持 googleApiClient 连接才能在数据层接收消息?
    • 我不知道Android Wear,但我可以回答第一部分。这不是“坏”,但肯定不是“好”。保持 googleApiClient 连接保持服务打开。该服务的维护成本可能很高,并且您使用的 API 的部分越多,它的成本就越高。这会导致负载增加,进而导致设备速度变慢、用户感到沮丧以及任务管理器杀死您的应用程序。最后,一般建议是,如果用户正在积极使用您的应用程序,则保持连接,当您进入后台并定期轮询时将其关闭。不过,Android Wear 可能会有所不同。
    • @Hounshell 如果您尝试使用 Wea​​rable.MessageApi 或 Wearable.DataApi 直接在 Activity/Fragment 中接收消息,是的,您需要连接到 GoogleApiClient。但是,您可以改为扩展 WearableListenerService 并覆盖 onDataChanged() 或 onMessageReceived(),这样您就不必自己连接到 GoogleApiClient。此时您可以做的是使用广播接收器/事件总线将事件传输到您的 Activity/Fragment。
    【解决方案2】:

    可能有多个连接的 GoogleApiClients,只是可能效率低下。您确实需要小心将 GoogleApiClient 与 AsyncTasks 一起使用,如果活动消失,它不会断开连接。

    考虑在保留的片段中管理 GoogleApliClient。见http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html

    【讨论】:

    • 谢谢(特别是链接)。
    • 如果我想在活动消失时也继续我的异步任务怎么办?我应该什么时候调用 api 客户端上的“断开连接”?
    【解决方案3】:

    这个问题正在通过非常常见的 OOP 组合知识和工厂设计模式来解决。说大约 1% 的东西,比如下面的 @Hounshell 不是工程方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-03
      相关资源
      最近更新 更多