【问题标题】:Android Studio - Global variable throughout an entire project?Android Studio - 整个项目中的全局变量?
【发布时间】:2019-07-24 21:52:36
【问题描述】:
所以我正在制作一款手机游戏,并在整个项目中进行多项活动。我一直在使用 Intents 将变量从一个活动传递到下一个活动,然后将这些变量传递回其他活动。因此,例如,如果 Activity1 中有一个值 x = 5,则该值将传递给 Activity2。然后,如果玩家在 Activity2 中将 x 更改为 6,则此信息将传回 Activity1。
这种方法有效,但似乎效率很低。有没有办法为整个项目创建一个全局变量,这样当我在一个活动中更改它时,它会在所有活动中更改?
谢谢
【问题讨论】:
标签:
android
android-studio
variables
android-activity
global
【解决方案1】:
简单,创建一个单例,将您的变量存储在那里,然后让您的活动在单例中读取和写入变量。
如何声明单例:
科特林:
object MySingleton {
var myVariable: Int = 0
}
Java:
public class MySingleton {
private int myVariable = 0;
// Getter/setter
private static MySingleton instance;
public static MySingleton getInstance() {
if (instance == null)
instance = new MySingleton();
return instance;
}
private MySingleton() { }
}
【解决方案3】:
有多种方法可以实现这一点,其中一些是根据良好的架构实践,而另一些则不是。一般来说,Singleton 模式首先会浮现在脑海中,但我会避免 Singleton,因为它是全局状态和反模式。
我会在您的 Application 类实现中添加该变量,并以 ((MyApplication) getApplication()).getMySharedVariable() 访问它
更好的是,您可以通过侦听器(使用侦听器或发布/订阅模式)使该变量可访问,这样任何人都可以订阅您的变量发生的所有更改并立即对其做出反应。来自 RxJava 的主题对于实现它非常有帮助。
【解决方案4】:
根据您的要求:
public class X {
public static int val = 0;
}
和
{
X.val = 5;
}
当然这是幼稚的 - 但如果您有更多要求,您应该指定它们。