使用ContentProviders,IntentServices和Loaders的最佳架构选择

时间:2015-03-06 13:21:56

标签: java android sqlite

我正在开发一个Android项目,我需要从远程服务器获取JSON数据,使用检索到的数据更新SQLite Db并更新列表视图。

我正在使用IntentServices来获取数据(我不需要定期更新),而DB由ContentProvider包装,因此由ContentResolvers访问。

现在我需要更新视图。为此,我认为我应该依赖于装载机,但我想知道什么是最好的建筑选择。

我将使活动/片段托管listView一个ContentObserver并将其注册到ContentProvider AND,当数据被更改时(onChange方法),启动一个Loader,目的是查询数据并更新视图。

这适用于DB的更新,但是应用程序启动时。因此,我需要在Activity / Fragment的onCreate方法中显式启动一个Loader。

我是对的吗?

2 个答案:

答案 0 :(得分:0)

我不喜欢这种方法,因为直接使用数据库并依赖数据集观察员通常意味着你不会建立一个合适的模型,而且在我看来,你将缺乏一个您应用程序中的重要抽象层。

当然,它非常有效,并且可以非常轻松快速地实现,仅用于显示信息的简单应用程序,仅此而已,但如果您希望在未来更改应用程序行为并扩展应用程序,该怎么办?

我发现将数据库数据链接到视图的最可扩展和可靠的方法是使用适当的数据模型和可靠的观察器模式,将控制器的数据操作链接到已注册的视图。

答案 1 :(得分:0)

简而言之,我认为与应用程序的其他部分(如网络服务)进行通信UI(活动/片段)的最佳方法是使用事件库。 Otto v EventBus是Android的最佳事件库。

以下链接的更多信息非常有用:

Durable Android REST Clients

注意:但是如果你想使用加载器,你可以阅读使用加载器进行通信UI和服务的SeriesGuide应用程序源代码

源代码:SeriesGuide

希望这个答案可以帮助你;)