我正在使用 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);
谢谢。
最佳答案
使用 Static
变量始终是正确的方法,因为它是您希望在任何地方都保持的单一状态。但是,当您拥有 java 提供的类似 SharedPreference()
的东西时,为什么要冒险,它更安全,您始终可以确定。并在您的应用程序中随处获取它。通常维护变量状态是一项冒险的任务。
使用实例变量维护状态的问题
实例变量对于您创建的不同对象/实例是不同的(因此它们被称为实例变量)所以如果尝试通过创建一个新对象来获取变量的值,它会返回一些您不想要的东西(因为它是在另一个实例中设置),就好像你使用 static variable
每个实例/对象都引用相同的变量(我的意思是说相同的内存位置)所以任何实例所做的任何更改都会反射(reflect)出来应用程序,与您访问它的方式无关。
关于java - Android 应用程序类全局实例或静态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7008253/