2012-02-09 20 views
5

Abbiamo un servizio che si prende cura di diverse cose in una delle nostre attività. Siamo abbastanza nuovi su Android e ci chiediamo quale sia il momento perfetto per legare a quel servizio. Abbiamo solo bisogno del servizio per metà delle interazioni che sono possibili tramite l'attività. Quindi dobbiamo accontentare di una delle due possibilità:Servizi Android: binding on demand e binding su #onCreate()

  • vincolano al servizio quando abbiamo davvero bisogno, che aggiungerebbe una discreta quantità di overhead implementazione-saggio
  • legano al Servizio nella onCreate() metodo senza il sovraccarico di controllare se il servizio è in esecuzione, vincolante su richiesta, forse richieste di cache effettuate ecc.

Quale sarebbe il "modo Android" qui? Il servizio in esecuzione è molto oneroso o dovrebbe essere avviato solo quando realmente necessario? Il servizio stesso è davvero leggero.

+1

Personalmente mi legherei ad esso su onCreate. Legare/rilegare tutto il tempo sembra superfluo e se si guardano attorno alle implementazioni dei Servizi non vedrai come è fatto. Questa è la mia esperienza, anche se non sono un esperto in merito ai servizi. Guardati intorno e guarda le altre implementazioni di peoples e googles. – DecodeGnome

risposta

1

Personalmente preferisco chiamare bindService() in onCreate(), e dopo averlo terminato di usarlo chiama unbindService() in onDestroy(). Il motivo è che bindService() è in realtà una chiamata asincrona. che non è stato ben documentato nell'API. Quando si chiama bindService(), il riferimento dell'oggetto binder che si ottiene all'interno del metodo di callback ServiceConnection.onServiceConnected() non viene immediatamente istanziato, c'è un ritardo nel frattempo dopo aver chiamato bindService() e prima che l'oggetto binder venga istanziato e pronto per l'uso . quindi il posto più adatto per chiamarlo è onCreate() poiché di solito non eseguiamo operazioni molto pesanti e abbiamo bisogno di utilizzare immediatamente l'oggetto binder in questa fase.