Android MVP-如何在后台服务中创建模型/存储库实例以访问模型方法?

Android MVP-如何在后台服务中创建模型/存储库实例以访问模型方法?,android,android-fragments,mvp,Android,Android Fragments,Mvp,我在Android应用程序中使用MVP模式。我的要求是 1。当用户单击“同步”按钮时同步捕获的数据 2。作业调度器,即使应用程序未运行,也将在午夜调用后台服务并与服务器同步数据。 两种方案的流程都是: 1)当用户单击“同步”按钮时同步捕获的数据 将调用getPresenter().notifySyncBtnPressed() notifySyncBtnPressed()将通过调用mModel.sync()来指示模型 “从模型同步”具有从数据库获取数据、将数据上传到服务器并将结果通知演示者的完整

我在Android应用程序中使用MVP模式。我的要求是

1。当用户单击“同步”按钮时同步捕获的数据

2。作业调度器,即使应用程序未运行,也将在午夜调用后台服务并与服务器同步数据。

两种方案的流程都是:

1)当用户单击“同步”按钮时同步捕获的数据

  • 将调用getPresenter().notifySyncBtnPressed()

  • notifySyncBtnPressed()将通过调用mModel.sync()来指示模型

  • “从模型同步”具有从数据库获取数据、将数据上传到服务器并将结果通知演示者的完整实现
  • 然后,演示者通过调用getView()通知查看。notifySyncFinished()
注意:我对这个流程很清楚-如果需要,建议改进

2)将调用后台服务的作业调度程序(请在此提供您的说明)

  • BroadcastReceiver将调用扩展IntentService的服务类
  • 创建模型对象(IModel model=new model())并从OnHandleContent()调用model.sync()
  • 因为没有UI,所以不需要调用presenter。无需通知状态
  • 同步操作完成后,服务将被终止
请建议,

1。从服务类调用模型(存储库)实例是否正确?


2。我还混淆了模型层和存储层,MVP中的模型层和存储库层是否有任何区别。

现在我明白了为什么您需要来自服务的演示者,如果是这种情况,我认为您应该专门为服务创建一个演示者。这是相当核心的,但它是有意义的

不管怎么说,这些步骤似乎很好,演示者应该与“模型”(MVP中的M)交互,它通常由交互者组成。如果您想要使用存储库模式,那么这将发生在交互者之后,并且将是模型层的一部分


我会将您的IModel重命名为IInteractor,每个需要数据的组件都将与该类接口。然后,交互者可以访问存储库,并且对表示层不可见。

hum,您可以在活动中单击,在演示者中调用活动调用syncWithServer,然后演示者可以在您的活动上调用可以与服务通信的方法。为什么要从服务中获取演示者实例?要求是:应用程序应每4小时与服务器同步一次,即使应用程序未运行,用户也应能够在“同步btn”单击时手动与服务器同步。要实现此目的,我正在使用alarmManager每4小时安排一项任务,后台服务将启动,该服务将与服务器同步数据,并通过通知栏中的通知通知用户。演示者处理视图,如果操作必须在没有任何UI的情况下触发,您需要演示者做什么?根据第1阶段的实施,整个业务逻辑都在Presenter中,单击按钮会触发同步操作。现在在第2阶段,同步应该在特定的时间间隔触发。(可能正在使用JobScheduler或alarmManager)在设计/重新设计应用程序时有点困惑。我可以看到你的困惑,请记住,演示者的目的是控制UI,将其视为傀儡。如果您需要执行一项不需要UI的任务,而您仍然需要演示者,那么设计有问题