2012-05-15 13 views

Respuesta

5

Dado que mantener un objeto de servicio del sistema tiene muy poco costo continuo, recomiendo mantenerlo en un miembro de datos. Ya sea que obtenga uno en onCreate() o lo inicialice de forma diferida si/cuando sea necesario depende de usted.

Tenga en cuenta que utilizando un objeto de servicio del sistema puede tener un costo significativo. La celebración de una instancia LocationManager es barata; el uso de GPS (por ejemplo, a través de requestLocationUpdates()) no es barato.

+0

Gracias por el puntero que algunos objetos de servicio son más costosos que otros. –

+0

¿Por qué recomienda almacenar el servicio? ¿Crees que hay mucho costo para llamar a 'getSystemService'? – Sam

+1

@Sam: "¿Crees que hay mucho costo para llamar a getSystemService?" - Probablemente no sea enorme, pero podría involucrar a IPC. – CommonsWare

0

Estaba a punto de preguntar lo mismo. Así es como lo hago: dentro de un servicio (que hereda de Context)

private static volatile LocationManager lm; // not final - we need a context 

private LocationManager lm() { 
    LocationManager result = lm; 
    if (result == null) { 
     synchronized (LocationMonitor.class) { // my service 
      result = lm; 
      if (result == null) 
       result = lm = (LocationManager) 
        getSystemService(Context.LOCATION_SERVICE); 
     } 
    } 
    return result; 
} 
Cuestiones relacionadas