有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

这是怎么回事?我能做些什么来防止


共 (2) 个答案

  1. # 1 楼答案

    你的对象被GC’删除了,因为android杀死了你的应用程序。所以它用静态数据销毁了所有加载的类。 下一次当你回到你的应用程序时,新创建的应用程序和新的ResultLoader类加载的实例字段等于null。当您试图通过getInstance方法获取实例时,会创建一个新实例,结果为空

    你应该将结果保存到永久性内存中。例如,当你得到结果时,把它保存到一个文件中。创建ResultLoader时,请检查文件是否存在,并从文件中加载数据。或者,如果你的应用程序被杀死,再次加载结果

  2. # 2 楼答案

    在安卓系统中,由于许多原因(内存不足就是其中之一),你的应用程序可以也将被重新创建

    要在自定义类上实现saveinstancestate行为,请参见以下答案here