帮助我的Android应用程序的架构

时间:2011-07-24 14:48:53

标签: android architecture

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

  • myStocksActivity包含我感兴趣的股票
  • searchingStocksActivity包含我可以在myStocksActivity中包含的列表中添加的股票列表
  • winnersLoosersStocksActivity包含当天表现最佳或最差的股票清单。

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

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

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

我正考虑将库存清单的更新移至服务,但我不希望在应用程序未运行时运行此服务。

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

3 个答案:

答案 0 :(得分:1)

如果我是你,我会先尝试设计(并构建)一个域模型。这最终应该是一组类,它允许您使用库存完成所需的一切,而不管UI。您还应该将数据持久性直接构建到这些类中(我建议使用SQLite)。

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

将您的活动实现为视图,这些活动既可以呈现数据,也可以捕获UI事件并将这些事件委派给Presenter实例,然后Presenter实例传达/操作模型,并相应地更新视图。例如,

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

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

关于每X分钟自动更新一次,我会用AsyncTask处理这个问题,如果你只想在应用程序运行时发生这种情况,那么使用服务并不是很重要。

答案 1 :(得分:0)

每当主要活动暂停(或销毁)时,请致电StopService(blabla);。 这样你就可以将它作为服务保留,并且它不会在后台运行。

答案 2 :(得分:0)

  1. 为股票创建一个类,并将更新逻辑存储在那里
  2. 我会把处理程序 - 什么保存库存类的实例并循环到一个集合以告诉它们更新 - 在它自己的类中纯粹使用静态方法和变量,或者在库类中使用静态方法/等
  3. 该服务随后包含计时信息,并调用静态update()方法
  4. 显示股票的活动使用onCreate / onDestroy或onUpdate / onPause启动/停止服务(我认为它是更新;每当活动被带到最前端时就会发生这种情况)
  5. 相同的活动告诉处理程序类要加载哪些,并使用其列表进行显示。
  6. 另一件事:我建议不要使用服务。使用AsyncTask。服务实际上在UI线程上运行,因此如果在更新期间存在长时间运行的循环,则UI将冻结。 AsyncTask启动一个线程,不会阻止UI。