如何在Android中创建全局变量?

13
在我的安卓应用程序中,我需要一个地方来存放变量成员ID。问题是,它从在线API获取,并且我需要找到一种存储/检索它的方法。
我尝试将其放在自定义类中,但问题是,如果我杀死活动,它就会丢失。我也知道有一种方法可以扩展应用程序。
那么,什么是存储全局变量的最佳方法?
我必须执行以下操作:
1. 在onSaveState中保存变量 2. 存储在sharepref上 3. 手动保存 4. 手动检索
谢谢
更新: 感谢回复。如果我只有3个变量(简单数据,例如布尔值、短语),并且我需要在应用程序重新启动后使用它们,我是否应该简单地使用share pref来存储它们?它的缺点是什么?例如,它会对性能有害吗?谢谢

2
查找单例设计模式。 - Smutje
2
请不要看单例反模式 - amit
4个回答

29

在Android中,您可以通过将变量声明在继承Application类的类中来创建全局变量。

就像这样:

class MyAppApplication extends Application {

    private String mGlobalVarValue;

    public String getGlobalVarValue() {
        return mGlobalVarValue;
    }

    public void setGlobalVarValue(String str) {
        mGlobalVarValue = str;
    }
}

主活动(MainActivity.java)

class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle b){
        ...
        MyAppApplication mApp = ((MyAppApplication)getApplicationContext());
        String globalVarValue = mApp.getGlobalVarValue();
        ...
    }
}

更新

该变量将保存值,直到您的应用程序被销毁。如果您希望在应用程序实例销毁后仍然保留值,则可以使用SharedPreferences来实现这一点。

从这里了解有关SharedPrefernces的信息:http://developer.android.com/reference/android/content/SharedPreferences.html


1
如果我想在活动之外的某个层访问这些值怎么办?我不能在那里使用getApplicationContext()。而且我也不应该在不同层之间传递Context对象。 - Punith Raj
1
静态变量怎么样? - Gurgen Hakobyan
@GurgenHakobyan 我认为当调用getApplicationContext()并使用静态变量时,我们会得到相同的MyAppApplication实例。 - JCarlosR
使用这个全局变量时性能如何? - questionasker

6
  • 如果你需要一个全局变量,这个变量可以在多个活动之间共享并保持其生命周期,并且不会持久化存储,也无法在应用程序重新启动后保存,那么第一个答案中建议的方法(扩展Application并将它放在那里)是可以的。
  • 如果您需要一个持久化的全局设置,它还应该在应用程序重新启动后保留,那么您应该使用其他建议的方法之一。 SharedPreferences 可能是最容易使用的。

另请参阅此 Stack Overflow 问题:Android 中分享数据的最佳方法是什么?


2
你可以将其存储在SharedPreferences中,并创建一个sharedpreferenceHelper类来检索/存储它。

1

如果您希望多次使用某些值,则最好以以下方式之一存储:

  • 共享首选项
  • 单例类
  • 将其写入文件
  • SQLite数据库
  • 存储在Web服务器上

我不同意。只有在应用程序重新启动时也需要数据时,才会更好。如果不是这样,例如需要在全新的启动时刷新数据,则TGMCians提供的答案符合需求。 - Bart Burg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接