Android应用程序类Globals实例或静态

时间:2011-08-10 09:01:26

标签: java android

我使用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);

谢谢。

2 个答案:

答案 0 :(得分:2)

始终使用Static变量是正确的方法,因为它是您想要在任何地方维护的单一状态。但是,当你有一些像java提供的SharedPreference()这样的东西时,为什么要冒风险,这样更安全,你总能确定它。并在您的应用程序中随处获取它。通常维持变量状态是一项危险的任务。

使用实例变量维护状态的问题

实例变量对于您创建的不同对象/实例是不同的(因此它们被称为实例变量)因此如果尝试通过创建新对象来获取变量的值,则返回您不想要的内容(因为它是在另一个实例中设置),好像你使用static variable每个实例/对象引用相同的变量(我的意思是说相同的内存位置)所以任何实例所做的更改都会在应用程序中反映出来,无论你如何访问它。

答案 1 :(得分:0)

鉴于应用程序类将是单例,我不会将它们作为静态变量。

此处有更多细节 java singleton pattern, should all variables be class variables?