2012-05-15 78 views

回答

5

由於持有系統服務對象的成本非常低,所以我建議將其保留在數據成員中。無論你在onCreate()中獲得一個還是懶惰初始化它,如果/需要時都取決於你。

請注意,使用系統服務對象可能會有很大的成本。持有LocationManager實例便宜;使用GPS(例如,通過requestLocationUpdates())並不便宜。

+0

感謝指針,一些服務對象是比其他人更昂貴。 –

+0

爲什麼你建議存儲服務?你認爲調用'getSystemService'需要多少成本? – Sam

+1

@Sam:「你認爲調用getSystemService需要很多成本嗎?」 - 這可能不是很大,但可能涉及IPC。 – CommonsWare

0

我正要問一樣的。這裏是我怎麼做 - 在一個服務(從上下文繼承)

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