2011-08-10 83 views
1

我正在使用android.app.Application類(一個子類)來存儲一些「全局」信息。一個例子是用戶最後一次從GPS/wifi上抓取它的位置。我的問題是我是否應該將這些「全局變量」存儲爲靜態變量或實例變量。不確定哪種情況更好或更正確。Android應用程序類全局實例或靜態

情形A:使用靜態變量 -

public class MyApplication extends android.app.Application { 

    private static Location myLocation; 
    public static Location getLocation() { 
     return myLocation; 
    } 
    public static void setLocation(Location loc) { 
     myLocation = loc; 
    } 
} 

情形A:使用 -

loc = MyApplication.getLocation(); 
MyApplication.setLocation(loc); 

情形B:使用實例變量 -

public class MyApplication extends Application { 

    private Location myLocation; 
    public Location getLocation() { 
     return this.myLocation; 
    } 
    public void setLocation(Location loc) { 
     this.myLocation = loc; 
    } 
} 

方案B:用法 -

loc = getApplication().getLocation(); 
getApplication().setLocation(loc); 

謝謝。

+0

更多細節我瞭解實例和靜態之間的一般概念。無論如何,我在這個Android應用程序中特別要求只有一個Application子類的實例。 – kharles

回答

2

使用Static變量總是正確的方式,因爲它是您想要維護的單一狀態。但爲什麼冒險,當你有像java提供的SharedPreference()這樣更安全的東西,你總是可以肯定的。並在您的應用程序中隨處獲得。通常維持變量狀態是一項風險很大的任務。使用實例變量來維護狀態

實例變量的

的問題是不同的對象不同/實例創建(所以叫實例變量),所以如果試圖通過創建一個獲得變量的值新的對象,它返回你不想要的東西(因爲它是在另一個實例中設置的),其中,如果你使用static variable每個實例/對象引用相同的變量(我的意思是說相同的內存位置),所以做了什麼改變通過任何實例反映出來的應用程序,無論你如何訪問它。