【问题标题】:Can I use the Application class as the Model for MVC in Android我可以在 Android 中使用 Application 类作为 MVC 的模型吗
【发布时间】:2014-07-24 19:04:14
【问题描述】:

对不起。我是新手,所以有经验,但是要遵循Android中的MVC设计模式,模型存储在哪里?我在考虑应用程序,因为它的范围非常广泛,任何组件都可以从中提取。这是一种好的思维方式吗?

【问题讨论】:

  • 您的问题的标题具有误导性,但在阅读后,您对 MVC 的理解并不像看起来那么奇怪:)。我会说,“是的”,应用程序是应用程序全局瞬态的合理锚点。它易于访问且有效地单例。也就是说,大多数人似乎只是使用经典的static Blah instance signleton 对象来表示他们的全局瞬态。
  • 需要注意的一点:如果您的应用程序在后台,操作系统可以决定终止其 Linux 进程以释放内存。当您的应用稍后恢复时,它将在一个新进程中运行,并且所有静态变量都将被重置。确保您使用活动的生命周期方法来持久化您需要持久化的所有内容 (onPause()/onSaveInstanceState())。

标签: android design-patterns model-view-controller


【解决方案1】:

在我们这里的一个项目中,我们确实使用应用程序来持久化它,但以某种结构化模式。

首先,正如您猜想的那样,模型是通过代表您的持久实体的类分层的,例如如果你持久化客户端,你将有一个客户端类来保存它的结构,所以我想当你说模型时,我想你是在谈论将在应用程序生命周期中存在的状态完整模型对象的持久性。

我们首先使用 android 注释。我们使用单例类(使用 @EBean(scope=Scope.singleton) 注释)并且我们的 Application 对象具有对该单例的引用。 我们还有其他实体(以及单例)用作控制器,它们是唯一能够在一定程度上使用“模型单例”访问和操作的实体,并且我们的活动与控制器有类似接口的通信,这些控制器可以访问“模型单例”上的持久数据,并通过其接口向活动提供反馈。

【讨论】:

    【解决方案2】:

    一般来说,使用ContentProvider 甚至单例类可能会更好。在Application 中保持状态的问题在于,如果您的应用程序的任何部分需要在不同的进程中运行,则该进程将拥有自己的Application 副本。在单独的进程中运行事情并不常见,但有几个理由这样做。单例类不解决与另一个进程共享状态的问题,但另一个进程可能不关心应用程序的模型。如果模型在Application 中,则不管其他进程是否需要,都会得到一份副本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多