2014-06-27 23 views
8

Sto sviluppando un'applicazione Android con Google+ API. Sto avendo più attività che richiedono ciascuna un'istanza di GoogleApiClient.Creazione GoogleApiClient per molteplici attività

quanto mi risulta da this post è possibile chiamare stessa istanza di GoogleApiClient per ogni attività. La mia domanda è: come possiamo creare copie di GoogleApiClient in modo specifico?

Costruiamo di nuovo uno con .addApi(), .addscope() e implementiamo nuovamente il metodo onConnected e il metodo OnConnectedFailedListener? Perché sembra ripetitivo e inefficiente. E l'implementazione di questi metodi non sovrascriverà gli stessi metodi anche da altre attività?

risposta

1

Ho appena avuto questo stesso dilemma. Per aggirare questo ho usato il BaseGameUtil ... non so se lo stai usando, ma se lo sei è semplice puoi semplicemente fare in modo che ogni attività estenda BaseGameActivity, aggiungi i metodi richiesti e poi crea un obj di GoogleApiClient e getApiClient che poi darti i mezzi per utilizzare GoogleApiClient nella tua seconda attività.

mGoogleApiClient = getApiClient(); 

Se il vostro non si utilizza il BaseGameUtil allora penso che avrebbe dovuto crearlo come si fa al di sopra che è un dolore, almeno il basegameutil fa per voi, più si può sempre cambiare che cosa è in BGU come sono più esempi di biblioteche.

Spero che questo aiuti.

12

Non è costoso per creare più istanze di GoogleApiClient. In effetti aiuterà l'efficienza se usi più di una sola API. Verranno inviati in spool solo i servizi richiesti in modo specifico. Pertanto, se un'attività utilizza Plus e un'altra utilizza Drive, il servizio Plus non deve essere caricato nello spool quando si è nell'attività di Drive.

Per essere chiari, si consiglia di creare un'istanza separata di GoogleApiClient per ogni attività, Frammento, Loader, un servizio o applicazione che si crea (forse anche alcuni altri che ho dimenticato troppo).

Se davvero non si desidera farlo, utilizzare il contesto dell'applicazione anziché un'attività o un frammento per creare lo GoogleApiClient e contenere un riferimento ad esso in un oggetto Applicazione.

+0

Sto pensando di tenere il mio riferimento a GoogleApiClient in un lavoro statico e imbuto ad esso in una coda di messaggi da diversi luoghi diversi nella mia app (cioè .: da un'attività o da Servizi a seguito di ricezione di un messaggio push). Riesci a pensare a eventuali bandiere rosse nel mantenere un riferimento statico a GoogleApiClient, utilizzando il contesto dell'applicazione? Sembra poco diverso dal tenerlo nell'oggetto Application. –

+0

L'uso del contesto dell'applicazione ha implicazioni. Il servizio può essere costoso da mantenere. Mantenerlo quando non ne hai bisogno causerà una notevole quantità di CPU e memoria in più quando puoi farti incappare in problemi su dispositivi di fascia bassa, ed è più probabile che la tua app venga chiusa quando è in background. Mantenere un riferimento ad esso legato al contesto dell'applicazione è disapprovato per questi motivi. Se lo farai comunque, non importa se lo memorizzi nell'oggetto Application o in qualche altro singleton. – Hounshell

+0

Grazie per la rapida risposta! Mi sono reso conto che posso usare blockingConnect su GoogleApiClient e dato che sto facendo tutto il mio lavoro in un thread in background Immagino che posso usare appena blockingConnect su GoogleApiClient, registrarsi per le mie geofences (ipotizzando un risultato positivo su blockingResult) e scollegare subito dopo. Mi sento meglio a farlo in questo modo piuttosto che mantenere il cliente e il contesto in giro per sempre. –

Problemi correlati