我使用android.app.Application类(子类)来存储一些“全局”信息。一个例子是我们上次从GPS / wifi抓取它时的用户位置。我的问题是我是否应该将这些“全局变量”存储为静态变量或实例变量。不确定哪种情况更好或更正确。
场景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 :(得分:2)
始终使用Static
变量是正确的方法,因为它是您想要在任何地方维护的单一状态。但是,当你有一些像java提供的SharedPreference()
这样的东西时,为什么要冒风险,这样更安全,你总能确定它。并在您的应用程序中随处获取它。通常维持变量状态是一项危险的任务。
使用实例变量维护状态的问题
实例变量对于您创建的不同对象/实例是不同的(因此它们被称为实例变量)因此如果尝试通过创建新对象来获取变量的值,则返回您不想要的内容(因为它是在另一个实例中设置),好像你使用static variable
每个实例/对象引用相同的变量(我的意思是说相同的内存位置)所以任何实例所做的更改都会在应用程序中反映出来,无论你如何访问它。
答案 1 :(得分:0)
鉴于应用程序类将是单例,我不会将它们作为静态变量。
此处有更多细节 java singleton pattern, should all variables be class variables?