java为什么我的对象在这个类中是垃圾收集的
我有一个类,它从API加载数据,并将结果存储/处理为POJO。大致如下(省略了一些与问题无关的内容):
public class ResultLoader {
Search search;
Result result;
static ResultLoader instance;
private ResultLoader() {
}
public static synchronized ResultLoader getInstance() {
if (instance == null) {
instance = new ResultLoader();
}
return instance;
}
public void init(@NonNull Search search) {
this.search = search;
}
}
Result
对象可能变得太大,以至于无法通过Intents
传递Activities
,因此,正如您所看到的,我将ResultLoader
设计为一个Singleton
,这样每个类都可以访问Result
对象
我模拟Android设备在limiting background processes to one内存不足的情况下运行,然后切换一些应用程序,回到我的应用程序
在myResultLoader
的实例上,要么结果对象变成了null
,要么实例被重新创建;我和你核对过了
ResultLoader.getInstance().getResult() == null
这是怎么回事?我能做些什么来防止
# 1 楼答案
你的对象被GC’删除了,因为android杀死了你的应用程序。所以它用静态数据销毁了所有加载的类。 下一次当你回到你的应用程序时,新创建的应用程序和新的ResultLoader类加载的实例字段等于null。当您试图通过getInstance方法获取实例时,会创建一个新实例,结果为空
你应该将结果保存到永久性内存中。例如,当你得到结果时,把它保存到一个文件中。创建ResultLoader时,请检查文件是否存在,并从文件中加载数据。或者,如果你的应用程序被杀死,再次加载结果
# 2 楼答案
在安卓系统中,由于许多原因(内存不足就是其中之一),你的应用程序可以也将被重新创建
要在自定义类上实现saveinstancestate行为,请参见以下答案here