2016-03-13 6 views
6

Zacząłem używać Dagger2 do zarządzania zależnościami i staram się zrozumieć, w jaki sposób mogę użyć DI, aby zapewnić pojedynczą usługę GoogleApiClient. Motywacje do tego są:W jaki sposób zapewniasz zależność od GoogleApiClient za pomocą Dagger2?

  • zmniejszyć kod szablonowe: różnorodności działań & Fragmenty wymagają GoogleApiClient
  • poprawić testowalności: obecnie tych działań i ich fragmenty nie są dobrze przetestowane

chcę zapewnić Singleton GoogleApiClient w zakresie aplikacji.

Jak sobie radzisz z oddzwonieniem? Czy wybrać auto-managed or manually-managed connection, istnieją pewne wywołania zwrotne, które muszą być obsługiwane:

  • GoogleApiClient.ConnectionCallbacks (ręcznym)
  • GoogleApiClient.OnConnectionFailedListener (oba)

Odpowiedz

3

Można użyć zastrzyk Stwórz klienta:

@Provides 
    @Singleton 
    GoogleApiClient providesGoogleApiClient(Context context) { 
      return new GoogleApiClient.Builder(context) 
        .addApi(Places.GEO_DATA_API) 
        .addApi(LocationServices.API) 
        .build(); 
     } 

A następnie zarządzaj oddzwonień na swoją aktywność

@Inject GoogleApiClient mGoogleApiClient; 



if (mGoogleApiClient != null) { mGoogleApiClient.registerConnectionCallbacks(this);   mGoogleApiClient.registerConnectionFailedListener`(this); 
} 

Mam nadzieję, że to może ci pomóc.

+0

Czy "onResume()" i "onPause()" są właściwym miejscem do zarejestrowania/wyrejestrowania odbiornika? – sidecarcat

+0

Twoja przykładowa metoda dostawcy tworzy klienta (nie tylko konstruktora, jak sugeruje twoje sformułowanie). – sidecarcat

+0

@sidecarcat Tak, masz rację, zapewnia klienta. Odłączanie jest normalnie wywoływane onStop() i onStart, do którego możesz zadzwonić połączyć –