java - Android 应用程序类全局实例或静态

标签 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);

谢谢。

最佳答案

使用 Static 变量始终是正确的方法,因为它是您希望在任何地方都保持的单一状态。但是,当您拥有 java 提供的类似 SharedPreference() 的东西时,为什么要冒险,它更安全,您始终可以确定。并在您的应用程序中随处获取它。通常维护变量状态是一项冒险的任务。

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

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

关于java - Android 应用程序类全局实例或静态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7008253/

相关文章:

java - 为什么在 Spring 配置类中的 @Bean 方法上不需要 @Autowired?

用于 mmorpg 游戏服务器的 Java SSLSocket

使用 Maven 配置文件选择的 Java 切换

android - 如何在 Android 中将视频上传到 YouTube?

java - 使用 spring 在 java 中执行 google app engine 后端操作

java - Hibernate 不允许带有 int 字段的嵌入对象为空?

android - Worklight 项目在禁用 'provide library resources' 时搜索 main.js 和 typematic.js

java - Dagger:android.content.Context 上没有可注入(inject)成员。你想添加一个可注入(inject)的构造函数吗?模块类要求

android - 使用 Scala 插件在 Android Studio 中设置测试

android - 通过 HTTPS POST 发送文件到远程