2

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

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

<应用程序 android:name=".App" ...

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

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

    (...)
 }

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

Info.getInstance().profile

应用程序持有对“信息”单例的引用以及单例持有对“配置文件”的引用这一事实不应该阻止它被垃圾收集吗?

任何帮助表示赞赏。谢谢!

4

2 回答 2

0

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

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

活动生命周期

于 2013-01-31T19:02:34.187 回答
-1

单例意味着只会实例化一个对象,垃圾回收与单例没有关系,请参阅此链接以更好地了解单例

查看如何在本地存储数据的答案 如何在应用程序中存储数据?

于 2013-01-31T18:44:05.800 回答