我正在将一个Repository模式单例与MVP结合使用。我有一个注册流程,我在那里存储需要跨屏幕使用的数据作为单例中的POJO。像这样:
class SignupRepository {
private SignupData signupData;
......
void setSignupParam1(String param1) {
signupData.setParam1(param1);
}
SignupData getSignupData() {
return signupData;
}
}
我现在面临的问题是,如果用户将应用程序放在流程中间的后台,signupData
会获得GC。当我试图检索我在步骤1中保存的值时,当用户处于步骤3时,我最终得到一个null
signupData
对象。我面临的限制是:
我无法从API获取所需的数据。进行注册的API调用是在流程结束时,我需要在本地保存数据。
存储库不知道演示者的生命周期。如果我使用像Realm或ObjectBox这样的本地持久化方法,我将不得不在存储库上创建一些将POJO保存到磁盘的persist()方法。我不喜欢这个,因为它将存储库的实现泄露给演示者并使其依赖于它。
我不想使用SavedInstanceState包来恢复我的数据,因为这会完全破坏MVP模式。我的观点将为我的演示者提供数据以保存在存储库中!
现在我倾向于选项2,但每次调用setter时都会将数据写入磁盘。我担心这可能是一个昂贵的电话。有没有干净的方法来处理这个?