¿Debe obtener el resultado getSystemService (…) en caché?

La documentación de getSystemService recomienda no compartir los objetos de servicio entre varios contextos diferentes .

Para un único contexto, ¿es preferible almacenar en caché el objeto de servicio asignándolo a un campo de instancia en onCreate() o debería obtenerse en el momento de su uso? ¿Cuál es el uso idiomático?

Dado que la celebración de un objeto de servicio del sistema tiene muy poco costo continuo, recomiendo mantenerlo en un miembro de datos. Si usted consigue uno en onCreate() o perezoso-inicializarlo si / cuando es necesario depende de usted.

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

Yo estaba a punto de pedir lo mismo. Aquí es cómo lo hago – dentro de un servicio (que hereda de Contexto)

 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; } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.