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

时间:2013-01-31 18:31:27

标签: java android garbage-collection

我看到了一种我没想到的关于Android垃圾收集的行为。

我有一个扩展Application app App的类并修改了manifest以便

<应用         android:name =“。App”......

我之前使用过这个,为了方便起见,可以通过静态方法获取Application上下文,但是也存储了小而重要的信息,这些信息只应在整个应用程序中进行垃圾回收。此信息存储在初始化的单个对象中,并存储在应用程序类中的引用:

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;
}
}

初始化Info时,也会初始化一个简单的成员对象:

public class Info {


    public Profile profile;

    (...)

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

    (...)
 }

我遇到的问题,当应用程序暂停并运行另一个内存密集型应用程序(强制进行垃圾回收)时,当我返回App时,在尝试访问配置文件var时出现NullPointerException

Info.getInstance()。简档

应用程序是否包含对“Info”单例的引用以及单例持有对“profile”的引用这一事实不应该使它不被垃圾收集?

感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:0)

进一步了解android中的应用程序生命周期。如果你启动另一个需要内存的应用程序,其他应用程序将在后台被杀死。

然后OnCreate应该再次运行,因此它不能是垃圾收集器,因为Info将从头开始再次创建。

Activity life cycle

答案 1 :(得分:-1)

Singleton 表示只会实例化一个对象,垃圾收集与单例之间没有关系,请参阅此link以更好地理解singleton

请参阅此答案,了解如何在本地存储数据How to store data in app?