【问题标题】:Help with the architecture of my Android app帮助我的 Android 应用程序的架构
【发布时间】:2011-07-25 00:08:18
【问题描述】:

我想编写一个应用程序来跟踪股票列表的价格。 将包含三个包含股票清单的活动:

  • myStocksActivity 包含我感兴趣的股票
  • searchedStocksActivity 包含我可以添加到 myStocksActivity 中包含的列表中的股票列表
  • winnersLoosersStocksActivity 包含当天表现最好或最差的股票列表。

我想将股票列表保留在 myStocksActivity 中,以便能够从该列表中删除或添加股票,并将 searchedStocksActivity 或winnersLoosersStocksActivity 中显示的股票添加到 myStocksActivity。

另一个挑战:股票价格应根据应用程序的设置每 X 分钟更新一次。价格应该只在应用运行时更新,并且应该只更新我当前正在查看的列表的价格。

目前,我的架构不是很好:几乎所有逻辑都包含在 myStocksActivity 中,我知道这不是一件好事。

我正在考虑将股票列表的更新转移到一项服务中,但我不希望该服务在应用程序未运行时运行。

你怎么看?我的问题清楚吗?谢谢!

【问题讨论】:

    标签: android architecture


    【解决方案1】:

    如果我是你,我会先尝试设计(并构建)一个领域模型。这最终应该是一组类,它们允许你对股票做任何你想做的事情,独立于 UI。您还应该直接在这些类中构建数据持久性(我建议使用 SQLite)。

    然后,一旦您有了一个工作模型,就可以在此基础上构建 UI。 MVP 设计模式适用于 android。

    将您的活动实现为视图,它们都应该呈现数据,并捕获 UI 事件并将这些事件委托给 Presenter 实例,然后由 Presenter 实例进行通信/操作模型,并相应地更新视图。例如,

    MyStocksView 可以向用户显示股票列表,以及股票价格的最新走势(或其他)。 MyStocksView 包含构成用户界面的实际小部件,还充当各种 UI 事件(如用户单击按钮时)的事件侦听器和处理程序。它还应该包含一个 MyStocksPresenter 类的实例。

    一旦用户单击按钮,比如说“删除股票”,MyStocksView 的事件处理程序就会在演示者实例中触发一个方法,例如 presenter.removeStock(id) ,然后此方法会更新模型(删除它从内存中的数据结构和数据库),最后,如果一切都成功,更新视图。它基本上充当表示层和数据模型之间的中间人。

    关于每 X 分钟自动更新一次,我会使用 AsyncTask 来处理这个问题,如果您只想在应用程序运行时发生这种情况,那么使用服务并没有多大意义。

    【讨论】:

    • 您好,谢谢您的回答。我会看看 MVP 模式,也许会在这里问更多问题。再次感谢您!
    【解决方案2】:

    每当您的主要活动被暂停(或破坏)时,请致电StopService(blabla);。 这样您就可以将其保留为服务,并且不会在后台运行。

    【讨论】:

    • 好的,谢谢。我一直在寻找一个完整的架构想法/示例,因为我在 Android 开发方面没有太多经验。例如,我应该如何处理引号列表?我应该如何添加来自 winsLoosersStocksActivity 的股票?等等……
    • 嗯,现在您几乎是在要求我们为您编写代码,不是吗?
    【解决方案3】:
    1. 为股票创建一个类,并在其中存储更新逻辑
    2. 我会将处理程序 - 保存股票类的实例并在集合上循环以告诉它们更新 - 要么放在它自己的纯静态方法和变量的类中,要么也放在带有静态方法的股票类中/等
    3. 服务然后包含计时信息,并调用静态 update() 方法
    4. 显示股票的 Activity 使用 onCreate/onDestroy 或 onUpdate/onPause 启动/停止服务(我认为是更新;每次将 Activity 置于最前沿时都会发生这种情况)
    5. 相同的活动告诉处理程序类要加载哪些,并使用其列表进行显示。

    另一件事:我建议不要使用服务。使用 AsyncTask。服务实际上是在 UI 线程上运行的,因此如果在更新期间存在长时间运行的循环,UI 将冻结。 AsyncTask 启动一个线程并且不会阻塞 UI。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-21
      • 1970-01-01
      • 2011-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      • 1970-01-01
      相关资源
      最近更新 更多