Java 类的类成员被垃圾收集,即使应用程序有对它的引用

Java 类的类成员被垃圾收集,即使应用程序有对它的引用,java,android,garbage-collection,Java,Android,Garbage Collection,在Android上,我看到了一种我没有预料到的垃圾收集行为 我有一个类,它扩展了名为App的应用程序,并修改了清单,以便 Singleton意味着只实例化一个对象,垃圾收集与Singleton没有关系,请参阅本文以更好地理解 关于如何在本地存储数据,请参见此答案Singleton意味着只有一个对象将被实例化,垃圾收集与Singleton没有关系,请参见此以更好地理解 查看此关于如何在本地存储数据的答案了解有关android应用程序生命周期的更多信息。如果您启动另一个需要内存的应用程序,其他应用程

在Android上,我看到了一种我没有预料到的垃圾收集行为

我有一个类,它扩展了名为App的应用程序,并修改了清单,以便


Singleton意味着只实例化一个对象,垃圾收集与Singleton没有关系,请参阅本文以更好地理解


关于如何在本地存储数据,请参见此答案

Singleton意味着只有一个对象将被实例化,垃圾收集与Singleton没有关系,请参见此以更好地理解


查看此关于如何在本地存储数据的答案

了解有关android应用程序生命周期的更多信息。如果您启动另一个需要内存的应用程序,其他应用程序将在后台被杀死

然后OnCreate应该再次运行,所以它不能是垃圾收集器,因为信息将从一开始就被再次创建


了解更多关于android应用程序生命周期的信息。如果您启动另一个需要内存的应用程序,其他应用程序将在后台被杀死

然后OnCreate应该再次运行,所以它不能是垃圾收集器,因为信息将从一开始就被再次创建


如果您有硬引用,GC无法收集对象。您的代码有一个与GC无关的bug。显示更多代码)将其更改为:private Profile@Leonidos:我也这么想了很长时间,但是我已经看过代码了,除了GC,我还没有找到其他解释。我稍后再看一看。谢谢@martinezpt这不可能是真的)向我们展示你所有的代码和行,你在哪里得到错误和日志。@Leonidos我刚刚解决了这个问题。整个应用程序正在被垃圾收集(我知道这可能发生)。问题是重新创建时,该进程与正常启动略有不同,因为
public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);
正在还原一些视图,这些视图在正常启动期间仅在一些初始化发生后创建。这导致这些还原视图中的一些引用依赖于根本不存在的内容。如果您有硬引用,GC无法收集对象。您的代码在某个与GC无关的地方存在错误。显示更多代码)Change it to:private Profile;@Leonidos:我也这么想了很长时间,但是我已经检查了代码,除了GC之外,我没有找到任何其他解释。我稍后会再看。谢谢!@martinezpt这不可能是真的)向我们展示您所有的代码和代码行,其中有错误和logcat。@Leonidos我刚刚解决了这个问题。整个过程应用程序正在被垃圾收集(据我所知,可能会发生这种情况)。问题是,当重新创建应用程序时,该过程与正常启动略有不同,因为
public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);
正在还原一些视图,这些视图在正常启动期间仅在某些初始化发生后创建。这导致这些还原视图中的某些引用依赖于根本不存在的内容。这就是为什么我将对象放在应用程序类中,以便它在应用程序的生命周期内保留或重新创建如果整个应用程序(不仅是活动)被终止,则该对象将被重新创建。这就是为什么我在应用程序类中有该对象,以便在应用程序的整个生命周期内保持该对象,或者如果整个应用程序(不仅是活动)被终止,则该对象将被重新创建。
public class App extends Application {

Context mContext;
Info info;

@Override
public void onCreate() {
    super.onCreate();
    mContext = this;

    info = Info.getInstance();

    this.setTheme(R.style.MyTheme);
}

public static Context getContext(){
    return mContext;
}
}
public class Info {


    public Profile profile;

    (...)

    private Info() {
       profile = new Profile();
    }

    (...)
 }