2016-08-11 2 views
3

저는 지오 펜싱과 같은 다른 API에 액세스 할 때 Android의 GoogleApiClient를 사용하고 있습니다. Google은 GoogleApiClient 및 Google Play 서비스를 통해 감사하고 있습니다. Google은 오래된 Android 기기가 완전히 새로운 운영체제 업데이트가 필요없는 내부 API에 연속적인 업데이트를 다운로드하도록 허용하여 Google 조각화 문제를 해결하기 위해 노력했습니다.GoogleApiClient 디자인 패턴이란 무엇입니까?

Java 수준에서 나에게 명확하지 않은 점은 GoogleApiClient가 연결/일시 중단/실패에 대한 콜백을 필요로하고 지원한다는 것입니다. 더 자세한 내용이 없으면 본질적으로 다른 API에 대한 래퍼 인 GoogleApiClient가 지나치게 익히고 강조됩니다. 연결/일시 중단/등이 개발자에게 투명하지 못했습니까? 최악의 경우 서비스에 액세스하지 못했을 때 예외를 throw하지 못했습니까?

그래서 나는 비판하기보다는 디자인에 감사 할 수없는 구멍이 있다고 생각합니다. 왜 Google은 이러한 방식으로 API 클라이언트를 설계 했습니까? 그들이 따라 다니는 디자인 패턴이 있습니까?

답변

2

는 구조화되는 방식에 대한 여러 가지 이유가 있지만 무엇보다도 사실이다 : 당신은 안드로이드 UI 메인 쓰레드에서 호출 할 수 있도록

  • GoogleApiClient 코드 설계는 (AsyncTask 또는 백그라운드 스레드를 명시 적으로 만들지 않고)
  • GoogleApiClient 코드를 실행하는 데 시간이 오래 걸릴 수 있습니다 (예 : 사용자가 Play 서비스를 설치하지 않은 경우 사용자에게 Play 서비스를 다운로드/설치하라는 메시지와 함께 Play 서비스를 설치 한 후 응용 프로그램으로 돌아 가기)
  • Android UI 주 스레드가 장기 실행 작업 (예 : Play 스토어에서 애플리케이션 다운로드)으로 인해 차단되는 경우 응답이 없습니다. 따라서 콜백 등록은 Android 토지에있는 코드에서 꽤 표준입니다. [Android UI 메인 스레드를 오랫동안 차단하면 응용 프로그램 강제 종료 시스템의 일반적인 원인이됩니다.]

이제 Play 서비스의 복잡성에 추가되는 많은 것들 중 하나가 유연함에 대한 필요성, Play 서비스를 사용하는 모든 응용 프로그램이없는 다양한 기능/라이브러리를 지원해야하는 필요성 (지원되는 모든 라이브러리를 컴파일/포함해야 함 (모든 관련 응용 프로그램을 피함) Play 서비스를 활용하는 각 앱에 복제 된 Play 서비스의 기능). 이러한 이유로 Play 서비스는 클라이언트 - 서버 아키텍처를 사용합니다. Play 서비스를 사용하는 앱은 해당 시스템의 기본 기능을 제공하는 코드를 포함하여 모든 Play 서비스를 가져 오지 않습니다. 대신 Play 서비스를 사용하는 각 앱은 Play Services 앱에서 해당 서비스의 구현과 통신 할 수있는 훨씬 작고 집중된 인터페이스 세트를 가져옵니다 (Play 서비스 앱 만 포함). 이러한 인터페이스를 실제로 구현하는 논리). 하지만이 아키텍처 덕분에 "가져 오기"와 동등한 작업을 런타임에 수행해야합니다. 즉, 기능을 사용하기 전에 Play 서비스 앱을 다운로드하고 초기화해야합니다.

+0

자세한 답변을 주셔서 감사합니다. –

관련 문제