如何在Android中的所有活动中维护变量?

时间:2015-07-27 18:05:40

标签: java android

我有一个有3个活动的应用程序。

  • 活性1
  • 活性2
  • Activity3

当用户打开应用程序时,我将获取用户的位置并将其存储在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中的不同活动中使用变量。根据我的经验,我可以说使用静态变量并不是一个安全的选择。

3 个答案:

答案 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之间传递数据的方法很少。

  1. SharedPreferences
  2. SQLite
  3. 保存到文件
  4. Intent与putExtra
  5. 在Android环境中,用户始终可以删除应用数据,因此无论如何都需要为此做好准备