Android 什么';GoogleapClient的设计模式是什么?

Android 什么';GoogleapClient的设计模式是什么?,android,google-api-client,Android,Google Api Client,一段时间以来,我一直在使用Android的GoogleAppClient访问其他API,如GeoFenging。我很感激通过GoogleAppClient和Google Play服务,Google一直在努力解决Google碎片化问题,允许旧的Android设备下载包含在其中的API的连续更新,而不需要全新的操作系统更新 我在Java级别还不清楚的是,为什么GoogleAppClient需要并支持针对connect/suspend/fail的回调?没有进一步的细节,GoogleAppClient(

一段时间以来,我一直在使用Android的GoogleAppClient访问其他API,如GeoFenging。我很感激通过GoogleAppClient和Google Play服务,Google一直在努力解决Google碎片化问题,允许旧的Android设备下载包含在其中的API的连续更新,而不需要全新的操作系统更新

我在Java级别还不清楚的是,为什么GoogleAppClient需要并支持针对connect/suspend/fail的回调?没有进一步的细节,GoogleAppClient(它本质上是其他API的包装器)似乎已经被过度开发和过度工程化了。连接/挂起/etc对开发人员来说难道不是透明的吗?在最坏的情况下,如果访问服务失败,它就不能抛出一个异常吗


因此,与其批评,我认为我的知识有一个漏洞,这意味着我不能欣赏这个设计。为什么谷歌用这种方式设计API客户端?他们是否遵循了一种设计模式?

它的结构有很多原因,但最重要的是:

  • GoogleAppClient代码的设计使您可以从Android UI主线程调用它(无需显式创建异步任务或后台线程)
  • GoogleAppClient代码可能需要很长时间才能运行(例如,如果用户尚未安装播放服务,它将提示用户下载/安装播放服务,并且仅在安装播放服务后将控制权返回给应用程序)
  • 如果主线程被长时间运行的操作(例如从Play Store下载应用程序)阻塞,Android UI将变得无响应。因此,在Android land中,注册回调是此类代码的标准。[长时间阻塞Android UI主线程是系统强制退出应用程序的常见原因]

现在,除此之外,增加Play Services复杂性的诸多因素之一是灵活性的需要,即需要支持许多不同的功能/库,而不需要每个使用Play Services的应用程序编译/包含其支持的每个库(与此相关的是,通过在利用Play Services的每个应用程序中复制Play Services的所有功能来避免每个应用程序的膨胀)。因此,Play Services使用客户端-服务器体系结构;使用Play Services的应用程序不会导入所有Play Services(包括提供该系统底层功能的代码)。相反,每个使用Play Services的应用程序都会导入一组更小、更集中的接口,这些接口能够与Play Services应用程序中这些服务的实现进行通信(只有Play Services应用程序本身需要包含实际实现这些接口的所有逻辑)。但是,由于这种架构,您需要执行与“导入”等效的操作但在运行时……也就是说,在使用Play Services应用程序的功能之前,您可能需要下载并初始化该应用程序。

谢谢您的详细回答。