我在Main活动中有一个公共静态变量,所以我可以在其他活动中使用它,我从活动#3更新它并检查它的值,它没关系,但是当我打开前者的另一项活动。活动#2它返回之前的值,因为它没有更新。
我到目前为止尝试过:
//activity#3
Main.myObject = new Object();
//returns the right (new Object's) value
和
Main.setMyObject(new Object());
Log.i("test", Main.myObject.Name()); //returns the right (new Object's) value
//activity#2
Log.i("test", Main.myObject.Name()); //returns the wrong (previous) value
但它返回它在应用程序启动时从数据库获得的值,如果我重新打开应用程序它返回所选值(因为它存储在DB中),但无法在运行时获得正确的值。
答案 0 :(得分:1)
使用单例模式
class SingletonObject{
private static SingletonObject instance;
private Object object;
private SingletonObject(){
object = new Object();
}
public static synchronized SingletonObject getInstance() {
if (instance == null){
instance = new SingletonObject();
}
return instance;
}
public Object getObject() {
return object;
}
public void setObject(Object object) {
this.object = object;
}
}
用法
SingletonObject.getInstance().setObject(new Object());// or existing object
Object object = SingletonObject.getInstance().getObject();
答案 1 :(得分:0)
为变量使用“public static”修饰符。
public static Object myObject = new Object;
答案 2 :(得分:0)
看起来在两个活动中主要对象是不同的。我的意思是活动3具有与活动2中的主要对象不同的主要对象的参考
答案 3 :(得分:0)
您永远不应将Activity
视为POJO。创建Activity
的唯一方法是通过Intent
,在活动之间传递数据的唯一方法是使用intent Extra
。
有两种方法可以解决这个问题(其中包括)。扩展您的Application
类,在这种情况下,变量确实是全局的,或者创建一个基本活动类并从中扩展您的活动。
扩展Application
只有在你不能以任何其他方式完成时才应该这样做,因为全局变量通常是一件坏事并且用来避免编写正确的代码。
public BaseActivity extends Activity{
protected object myVariableForAllActivities;
}
public MyActivity extends BaseActivity{
myVariableForAllActivies = someValue;
}
答案 4 :(得分:0)
您可能希望在任何其他活动之外的应用程序中创建单例。该单例将返回到每个应用程序,并且将是相同的,它可以将您的对象存储在其中:
class Config {
private Config singleton;
private Config() {}
public static Config getInstance() {
if (singleton != null) return singleton;
singleton = new Config();
return singleton;
}
}
答案 5 :(得分:-1)
你描述的问题相当抽象,我会尝试一些假设的答案,看看我是否做对了。 通过活动,我认为你引用线程。通过主要活动我理解主线程。 但是,如果Main是具有public属性的特定类型的Object,并且该对象可由不同的线程访问,那么您必须控制这些线程对其状态(属性)的访问。 此外,如果主要对象通过复制而在线程之间传递,而不是引用它,那么您再次遇到获取先前对象的问题。 我的回答是不使用公共属性,没有实际的好处。将私有属性与getter和setter一起使用。这样你就可以: - 来自不同线程的同步访问; - 使用新值初始化在一个地方(设置者)完成。