如何在 Android 中的活动之间访问相同的变量

How to access the same variable between Activities in Android

我想知道如何在我的 Android 应用程序中的所有 Activity class 之间访问相同的 int 变量。我的情况是,我有一个代表多个点的变量,我将它放在自己的 class 中,我希望使用它的每个 Activity 之间的值相同。

当用户获得积分时,它会增加 1,假设用户获得 12 分,我希望它在所有 Activity 中都相同。

第 1 步:

从一个普通的 BaseActivity class.

扩展你所有的 Activity

第 2 步:

将您的 int 变量放入 BaseActivity 并将 protectedstatic 限定符添加到 int 变量:

public class BaseActivity extends Activity{

    ....
    ....
    protected static int points;
    ....
    ....

}

现在您可以在每个 Activity 中访问 points 变量并且它将具有相同的值。

正如其他答案所暗示的那样,这里不需要使用单例。有一个共同的 static 变量就简单多了。它的编程 101.

试试这个。这会起作用。

您可以使用单例对象class。但这是一个 java 基本模式。

public class MySingletonClass {

    private static MySingletonClass instance;

    public static MySingletonClass getInstance() {
        if (instance == null)
            instance = new MySingletonClass();
        return instance; 
    }

    private MySingletonClass() {
    }

    private int intValue;

    public int getIntValue() {
        return intValue;
    }

    public void setIntValue(int intValue) {
        this.intValue = intValue;
    }
}

而且你可以在任何地方使用

MySingletonClass.getInstance().getInt;

MySingletonClass.getInstance().setInt(value);

这不是最快的模式,但却是最好的模式之一。 事实上你可以添加多少你想要的var,你可以从任何地方访问,也在not-Activity class

您可以通过在应用程序上下文中定义变量并将该变量用作全局变量来实现。您只需为该变量设置值并在应用程序上下文(环境)中获取任何 activity / 广播接收器 / 服务的值。

每个应用程序都有一个上下文,并且Android保证应用程序上下文将作为一个实例存在于您的应用程序中。

方法是创建一个 class 并用 android.app.Application 扩展,并在 AndroidManifest.xml 文件的应用程序标签中指定 class。 Android 将创建该 class 的一个实例,并使其可用于您的整个应用程序上下文。您可以通过 Context.getApplicationContext() 方法在应用程序上下文(环境)中的任何 activity / 广播接收器/服务上获取 class 的对象。

N:B: 您可以通过创建静态变量来实现此目的,但这不是影响内存泄漏的好方法

你可以看代码示例here

创建一个 Java class 来扩展 Android 应用程序 Class。 将您的 int 变量作为静态变量放在那里。 然后创建您的 getter 和 setter 以从您的应用程序的任何位置访问变量。

public class MyApplication extends Application{
    private static int someInteger;
    //setter
    //getter
}

从任何 android class 像这样调用你的变量。

MyApplication.getSomeInteger()
MyApplication.setSomeInteger(Int someInteger)

为此,使用SharedPreference,更安全

将您的积分保存在 SharedPreference 中,以备不时之需。