存储库单例数据持久性

时间:2018-03-22 07:12:40

标签: java android repository-pattern mvp

我正在将一个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对象。我面临的限制是:

  1. 我无法从API获取所需的数据。进行注册的API调用是在流程结束时,我需要在本地保存数据。

  2. 存储库不知道演示者的生命周期。如果我使用像Realm或ObjectBox这样的本地持久化方法,我将不得不在存储库上创建一些将POJO保存到磁盘的persist()方法。我不喜欢这个,因为它将存储库的实现泄露给演示者并使其依赖于它。

  3. 我不想使用SavedInstanceState包来恢复我的数据,因为这会完全破坏MVP模式。我的观点将为我的演示者提供数据以保存在存储库中!

  4. 现在我倾向于选项2,但每次调用setter时都会将数据写入磁盘。我担心这可能是一个昂贵的电话。有没有干净的方法来处理这个?

0 个答案:

没有答案