getSystemService
的文档建议不要在不同的上下文之间共享服务对象。
对于单个上下文,是否最好通过将服务对象分配给onCreate()
中的实例字段来缓存服务对象,还是应该在使用时获取?什么是惯用法?
答案 0 :(得分:7)
由于持有系统服务对象的成本非常低,我建议在数据成员中保留它。无论您是onCreate()
还是懒惰,如果/需要,您都可以根据需要进行初始化。
请注意,使用系统服务对象可能会产生很高的成本。持有LocationManager
实例很便宜;使用GPS(例如,通过requestLocationUpdates()
)并不便宜。
答案 1 :(得分: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;
}