我看到了一种我没想到的关于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”的引用这一事实不应该使它不被垃圾收集?
感谢任何帮助。谢谢!
答案 0 :(得分:0)
进一步了解android中的应用程序生命周期。如果你启动另一个需要内存的应用程序,其他应用程序将在后台被杀死。
然后OnCreate应该再次运行,因此它不能是垃圾收集器,因为Info将从头开始再次创建。
答案 1 :(得分:-1)
Singleton 表示只会实例化一个对象,垃圾收集与单例之间没有关系,请参阅此link以更好地理解singleton
请参阅此答案,了解如何在本地存储数据How to store data in app?