10

的文档getSystemService建议不要在各种不同的上下文之间共享服务对象

对于单个上下文,是通过将服务对象分配给实例字段来缓存服务对象,onCreate()还是应该在使用时获取?什么是惯用用法?

4

2 回答 2

7

由于持有系统服务对象的持续成本非常低,我建议在数据成员中持有它。如果/在需要时,您是否获得一个onCreate()或延迟初始化它取决于您。

请注意,使用系统服务对象可能会产生大量成本。持有一个LocationManager实例很便宜;使用 GPS(例如,通过requestLocationUpdates())并不便宜。

于 2012-05-15T18:55:44.273 回答
0

我正要问同样的问题。这是我的做法 - 在服务内部(继承自 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;
}
于 2013-12-02T18:52:00.337 回答