我想写一个应用程序来跟踪股票清单的价格。 将有三个活动包含股票清单:
我想在myStocksActivity中保留股票列表,以便能够从该列表中删除或添加股票,并将searchStocksActivity或winnersLoosersStocksActivity中显示的股票添加到myStocksActivity。
另一个挑战:股票的价格应每X分钟更新一次,具体取决于应用程序的设置。价格应该只在应用程序运行时更新,并且只应更新我目前正在查看的列表的价格。
目前,我的架构并不好:几乎所有逻辑都包含在myStocksActivity中,我知道这不是一件好事。
我正考虑将库存清单的更新移至服务,但我不希望在应用程序未运行时运行此服务。
你怎么看?我的问题清楚了吗?谢谢!答案 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)
另一件事:我建议不要使用服务。使用AsyncTask。服务实际上在UI线程上运行,因此如果在更新期间存在长时间运行的循环,则UI将冻结。 AsyncTask启动一个线程,不会阻止UI。