getSystemService
的文檔建議不共享各種不同背景下的服務對象。應該緩存getSystemService(...)結果嗎?
對於單個上下文,最好是通過將服務對象分配給onCreate()
中的實例字段來緩存服務對象,還是應該在使用時獲取它?什麼是慣用法?
getSystemService
的文檔建議不共享各種不同背景下的服務對象。應該緩存getSystemService(...)結果嗎?
對於單個上下文,最好是通過將服務對象分配給onCreate()
中的實例字段來緩存服務對象,還是應該在使用時獲取它?什麼是慣用法?
由於持有系統服務對象的成本非常低,所以我建議將其保留在數據成員中。無論你在onCreate()
中獲得一個還是懶惰初始化它,如果/需要時都取決於你。
請注意,使用系統服務對象可能會有很大的成本。持有LocationManager
實例便宜;使用GPS(例如,通過requestLocationUpdates()
)並不便宜。
我正要問一樣的。這裏是我怎麼做 - 在一個服務(從上下文繼承)
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;
}
感謝指針,一些服務對象是比其他人更昂貴。 –
爲什麼你建議存儲服務?你認爲調用'getSystemService'需要多少成本? – Sam
@Sam:「你認爲調用getSystemService需要很多成本嗎?」 - 這可能不是很大,但可能涉及IPC。 – CommonsWare