类对象的生命周期:Java

时间:2014-06-28 20:31:48

标签: java android class static object-lifetime

我对Java变量和类对象的生命周期的了解是有限的,因此我问这个问题。我知道我们不能在java中创建静态类。关于SO的问题,我知道只有Java中的嵌套类才是静态的。

我的要求:我有一个具有不同活动的Android应用程序。在一个活动中,我要求提供用户详细信息,例如用户名和其他偏好,我希望这些也可以从其他活动中访问。我有一个具有不同类成员的类,用于存储/检索这些值(使用setter / getters)。

public class ClassTest {

public int x;
String a;

/**
 * @return the a
 */
public String getA() {
    return a;
}
/**
 * @param a the a to set
 */
public void setA(String a) {
    this.a = a;
}

/**
 * @return the x
 */
public int getX() {
    return x;
}

/**
 * @param x the x to set
 */
public void setX(int x) {
    this.x = x;
}
}

但是,当我想从另一个活动访问这些变量的值时,我创建了这个类的对象,并且存在我的问题 - 所有类成员现在再次初始化并且存储的值消失了!

ClassTest object=new ClassTest();
object.setA("foo bar");

在另一个活动中使用该对象,我创建了一个类的新对象:

ClassTest object=new ClassTest();

然后!价值观消失了!

我可以做的一件事是将它们保存在属性文件中并随时读取它们但我希望有一种方法可以使用类对象来实现。

欢迎任何关于如何实现这一目标的想法!

提前致谢:)

2 个答案:

答案 0 :(得分:1)

这就是为什么我们有

intent.putExtra("classTestObject", object);

您不必在每个活动中再次创建Object实例。只需传递参考。

答案 1 :(得分:1)

值将会消失,因为您正在创建类对象的new实例。

您应该创建Bundle并使用其值。

Intent i = new Intent(this, ActivityTwo.class);
String data = "Love for all, Hatred for none!";
//Create the bundle
Bundle bundle = new Bundle();
//Add your data to bundle
bundle.putString("something", data);  
//Add the bundle to the intent
i.putExtras(bundle);

我们有Intent.putExtra(String,Bundle) vs Intent.putExtra(Bundle)http://developer.android.com/reference/android/content/Intent.html#putExtra(java.lang.String, android.os.Bundle)来帮助您入门

即使在.onDestroy()

之后也要保存数据

要在应用程序完全被破坏或关闭后保存数据,您需要在系统中保存应用程序状态或数据。您可以使用Android OS提供的SQLite数据库。

关闭应用程序后,onCreate()方法将始终创建新对象。它本身并不保存任何对象。您需要使用.txt文件将数据保存在文件系统中,如您所说。或者通过保存在SQLite数据库中加密的UserName和Password。