【问题标题】:Android MVC design patternsAndroid MVC 设计模式
【发布时间】:2011-06-11 23:33:52
【问题描述】:

我正在寻找一些设计模式,用于在Android 应用程序中控制一组Activitys。我目前正在开发一个应用程序,我觉得它会经历许多 UI 的修改,直到它的“最终”发布(如果有的话)。我正在考虑使用Service 中的控制器的Observer 模式,但我找不到任何好的例子。我发现唯一常见的引用是使用AIDL 进行进程间接口绑定,这将不适用。

基本上我想要的是让Activity 实现定义的Interface,例如showLoginScreen()loginError() 等,这样任何UI 都应该能够实现(控制器不直接绑定到视图,只有它的接口)。如果这是完成此操作的最干净的方法,那么获取活动Activitys 的句柄的最佳接受方法是什么?我一直很困惑当你在一个不活跃的Activity 上调用一个方法时会发生什么。

我在想类似于Application 类中的Map 作为单身人士? Mapput() / remove() 将绑定到 onStart()onPause()。这仍然不能保证Activity 仍然存在...可以通过键上的get() 获得引用,然后在Service 有机会调用它之​​前它可能是paused()界面。

任何建议或见解将不胜感激。

编辑:我看过其他帖子,例如MVC pattern on Android,但它们大多没有解决实施问题(而且我完全不同意这个公认的答案)

【问题讨论】:

  • 为什么要进行多项活动?每个 Activity 是否代表您在 MVC 中的视图?
  • 每个活动都是一个单独的屏幕,用户需要与之交互。它们不会是试图完成相同任务的多项活动。除了全屏 3D 游戏,我不知道任何只有一个 Activity 的应用程序。
  • 您是否考虑过使用单个 Activity 作为控制器,然后在运行时动态切换屏幕/视图?
  • ^ 这是一个糟糕的 Android 设计决策,因为您失去了 xml 配置的灵活性。操作系统无法再自动为您选择最佳布局,而是您必须自己管理所有这些
  • 我不关注。 Android 如何确定最适合您的布局?您是指纵向和横向之间的关系吗?

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


【解决方案1】:

要在您的活动和服务之间使用观察者/可观察模式,您需要使用Bound services

这样,您可以获得IBinder 的句柄,它可以充当您的 Observable,而您不必担心 AIDL。您可以确保服务已在您的ServiceConnection 中的onServiceConnected() 方法中绑定。请记住,您的服务只有在绑定了一个 Activity 时才会处于活动状态,否则它将被停止。

我建议阅读 android Bound Services 文档,因为它很好地解释了用法。

【讨论】:

  • 非常感谢。你能否澄清一下如果 Activity 将自己注册为服务的观察者,然后触发一个事件,迭代所有注册的观察者并遇到一个不活动的观察者会发生什么?
  • 我实际上会在活动的 onPause() 或 onStop() 中取消注册活动并与服务解除绑定。然后,在 onResume() 或 onStart() 中再次绑定到服务,并在 onServiceConnected() 中注册监听器。在我的 onServiceConnected() 中,我会向 IBinder(或任何你观察到的东西)询问我在模型中观察到的任何东西的最新版本。这对你正在尝试做的事情有用吗?
  • 是的,确实如此,如果有的话,我很感兴趣的是什么“种族”条件......我们会看到 =P 再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-21
  • 2014-08-31
相关资源
最近更新 更多