我有一个有3个活动的应用程序。
当用户打开应用程序时,我将获取用户的位置并将其存储在Helper类的静态变量中。让我们说变量是latlng。现在我需要在Activity2中访问latlng变量的值。所以我只是在Activity2中使用Helper.latlng。它大部分时间都可以正常工作。
但是,如果我按下主页按钮并打开其他应用程序,然后返回我的应用程序,我的应用程序将关闭。经过调试后,我发现latlng变量在Activity2中变为空。
因此,经过各种文档后,我发现如果有很多应用程序在运行,那么Android操作系统可能会杀死一些应用程序。所以基本上如果我打开一些其他应用程序,我的当前活动会被操作系统破坏。所以我的所有静态变量都自动消失了。
解决此问题的一种方法是继续使用onSavedInstanceState方法的静态变量,该方法在活动被销毁时调用。
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中的不同活动中使用变量。根据我的经验,我可以说使用静态变量并不是一个安全的选择。
答案 0 :(得分:1)
只是为了获得最重要的部分:除非你确切知道自己在做什么,否则你不应该在Android中使用静态变量。否则你将会造成内存泄漏和其他一系列问题。
如果要将数据传递给另一个Activity,则应使用Intents。
方法调用总是会产生额外的开销。直接访问字段总是更快。但这并不意味着你应该放弃吸气剂和制定者。
例如,看看这个类示例:
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是不可能的,因为每次调用它都需要额外的开销。
如果你在下面的另一个类中使用Example类,你应该使用getter和setter方法:Example instance = new Example();
instance.setText("some text");
...
String text = instance.getText();
将该字段公开并直接访问它就像instance.text一样糟糕。
但是,任何现代设备都具有如此强大的计算能力,方法调用产生的开销完全可以忽略不计。 The DOC请说明您应该避免在性能关键位置使用getter和setter,但该规则是从大多数Android手机拥有128 MB RAM的时候开始的。你应该遵守我上面解释的规则的主要原因只有一点:编码风格。
您首先要关注的是编写干净,可读和可维护的代码。
答案 1 :(得分:0)
其中一种方法是使用android中的SharedPreferences
存储。
SharedPreferences pref =
getApplicationContext().getSharedPreferences("LocationPrefs", MODE_PRIVATE);
Editor editor = pref.edit();
// Save latLang as a string variable
editor.putString("latLang", "string value of latLang");
// Save the changes
editor.commit();
您可以通过这种方式检索结果,
String latLang = pref.getString("latLang", null);
答案 2 :(得分:0)
在Activities之间传递数据的方法很少。
在Android环境中,用户始终可以删除应用数据,因此无论如何都需要为此做好准备