我有一个包含 3 个 Activity 的应用程序。
- Activity 1
- Activity 2
- Activity 3
当用户打开应用程序时,我将获取用户的位置并将其存储在 Helper 类的静态变量中。假设变量是 latlng。现在我需要访问 Activity2 中 latlng 变量的值。所以我只是在 Activity2 中使用 Helper.latlng 。大多数时候它工作得很好。
但是,如果我按主页按钮并打开其他应用程序,然后返回我的应用程序,我的应用程序强制关闭。调试后我发现 Activity2 中 latlng 变量变为 null。
所以,在查阅了各种文档之后,我发现如果有很多应用程序正在运行,那么Android操作系统可能会杀死一些应用程序。所以基本上,如果我打开其他应用程序,我当前的 Activity 就会被操作系统破坏。所以我所有的静态变量都会自动消失。
解决这个问题的一种方法是继续使用静态变量和 onSavedInstanceState 方法,该方法在 Activity 被销毁时调用。
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
LatLng latLng = Helper.latlng;
outState.putParcelable("latlng",latLng);
}
并使用
检索它 if( savedInstanceState != null ) {
Helper.latlng = savedInstanceState.getParcelable("latlng");
}
我真的很困惑是否应该采用上述方法。还有其他方法可以在 Android 的不同 Activity 中使用变量吗?根据我的经验,我可以说使用静态变量不是一个安全的选择。
最佳答案
只是为了摆脱最重要的部分:除非您确切知道自己在做什么,否则永远不要在 Android 中使用静态变量。否则,您将导致内存泄漏和其他一系列问题。
如果您想将数据传递给另一个 Activity,您应该使用 Intents。
方法调用总是有额外的开销。直接访问字段总是会更快。但这并不意味着您应该完全放弃 getter 和 setter。
例如看看这个类的例子:
public class Example {
private String text;
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public void doSomething() {
...
} }
在 doSomething() 内部,您应该直接使用该字段。在那里调用 getter 和 setter 并不是一种可行的方法,因为每次调用时都需要额外的开销。
如果您在另一个类中使用示例类,如下所示,您应该使用 getter 和 setter 方法: Example instance = new Example();
instance.setText("一些文本");
...
字符串文本 = instance.getText();
将字段公开并像instance.text一样直接访问它会很糟糕。
但是任何现代设备都具有如此强大的计算能力,以至于方法调用产生的开销完全可以忽略不计。 The DOC确实声明您应该避免在性能关键的地方使用 getter 和 setter,但该规则是从大多数 Android 手机具有 128 MB RAM 的时候开始的。您应该遵守我上面解释的规则的主要原因只有一件事:编码风格。
您首先关心的应该始终是编写干净、可读且可维护的代码。
关于java - 如何在 Android 中的所有 Activity 中维护变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31660174/