为什么我的对象在此 class 中被垃圾收集

Why are my objects garbage-collected in this class

我有一个 class 从 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 所以每个 class 都可以访问 Result 对象。

我通过 limiting background processes to one 模拟 Android 设备 运行 内存不足,然后切换一些应用程序,返回我的应用程序。

在我的 ResultLoader 的实例上,Result 对象变成了 null 或者实例被重新创建;我用

检查了这个
ResultLoader.getInstance().getResult() == null

这是怎么回事,我该怎么做才能防止这种情况发生?

在 android 中,由于多种原因(内存不足是其中之一),您的应用可以并且将会被重新创建。

查看此答案 here 以在自定义 class 上实施 saveinstancestate 行为。

您的对象已被 GC 处理,因为 android 终止了您的应用。所以它用静态数据销毁了所有加载的 classes。 下次当你回到你的应用程序时,新的应用程序被创建并且新的 ResultLoader class 加载了实例字段等于 null。当您尝试通过 getInstance 方法获取实例时,会创建一个结果为空的新实例。

您应该将结果保存到持久内存中。例如。当您获得结果时,将其保存到文件中。当您创建 ResultLoader 时,检查文件是否存在并从文件加载数据。或者,如果您的应用被终止,请重新加载结果。