【问题标题】:How to create a global variable in android? [duplicate]如何在android中创建一个全局变量? [复制]
【发布时间】:2014-03-15 15:17:12
【问题描述】:

在我的 android 应用程序中,我需要一个放置变量成员 id 的地方。 问题是,它是从在线 API 获取的,我需要找到一种方法来存储/检索它

我尝试将它放在自定义类中,但问题是,如果我终止活动,它将丢失,我也知道有一种方法可以扩展应用程序。

所以我想知道存储全局变量的最佳方式是什么?

我必须实现:

  1. 在 onSaveState 上保存变量
  2. 将其保存在 sharepref 上
  3. 手动保存
  4. 手动检索

谢谢

更新: 谢谢你的答复。如果我只有 3 个变量(简单数据,例如布尔值、短语),并且在应用程序重新启动后需要它,我应该简单地使用共享首选项来存储它吗?它的缺点是什么?例如会不会影响性能?谢谢

【问题讨论】:

  • 查找单例设计模式。
  • 请不要看单身anti-pattern

标签: java android class variables global-variables


【解决方案1】:

您可以通过在扩展Application 类的类中声明它们来在android 中创建全局变量。

类似的东西。

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 最佳方式来执行此操作。

从这里了解SharedPrefernceshttp://developer.android.com/reference/android/content/SharedPreferences.html

【讨论】:

  • 如果我想在活动之外访问这些值怎么办,比如说在其他层?我不能在那里做 getApplicationContext() 。而且我不应该在不同的层传递上下文对象。
  • 静态变量呢???
  • @GurgenHakobyan 我认为我们在调用getApplicationContext() 时得到了相同的MyAppApplication 实例,并且使用静态变量具有相同的效果。
  • 使用这个全局变量时性能如何?
【解决方案2】:
  • 如果您需要一个 全局变量,该变量在多个活动之间共享并在其生命周期更改后仍然存在,但在其他情况下不会持久化并且不会在应用程序重新启动后继续存在,第一个答案中建议的方法 (扩展 Application 并将其放在那里)是可以的。
  • 如果您需要一个持久的全局设置,它也应该在应用程序重新启动后仍然存在,那么您应该使用建议的其他方法之一。 SharedPreferences 可能是最容易使用的。

另请参阅此 Stack Overflow 问题:What's the best way to share data between activities?

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      通过以下方式之一存储您想要多次使用的值总是更好:-

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

      【讨论】:

      • 我不同意。如果在重新启动应用程序时也需要数据,那就更好了。如果不是,并且例如新启动时需要更新数据,那么 TGMCians 的回答就符合需要。
      猜你喜欢
      • 2020-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      相关资源
      最近更新 更多