Pregunta ¿Debería almacenarse en caché getSystemService (...) result?


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

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


8
2018-05-15 18:50


origen


Respuestas:


Como 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 la inicialización lenta, si / cuando sea necesario depende de usted.

Tenga en cuenta que utilizando un objeto de servicio del sistema puede tener costos significativos. Teniendo una LocationManager la instancia es barata; usando GPS (p. ej., a través de requestLocationUpdates()) no es barato.


6
2018-05-15 18:55



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;
}

0
2017-12-02 18:52