的文档getSystemService
建议不要在各种不同的上下文之间共享服务对象。
对于单个上下文,是通过将服务对象分配给实例字段来缓存服务对象,onCreate()
还是应该在使用时获取?什么是惯用用法?
的文档getSystemService
建议不要在各种不同的上下文之间共享服务对象。
对于单个上下文,是通过将服务对象分配给实例字段来缓存服务对象,onCreate()
还是应该在使用时获取?什么是惯用用法?
由于持有系统服务对象的持续成本非常低,我建议在数据成员中持有它。如果/在需要时,您是否获得一个onCreate()
或延迟初始化它取决于您。
请注意,使用系统服务对象可能会产生大量成本。持有一个LocationManager
实例很便宜;使用 GPS(例如,通过requestLocationUpdates()
)并不便宜。
我正要问同样的问题。这是我的做法 - 在服务内部(继承自 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;
}