1

好的,这是我的第一篇文章,

我有一个从本地数据库表填充的 ListView。从那里我必须检查是否有来自 Web 服务的新数据,如果是这样,我首先必须更新那个特定的表,然后是 UI。

现在我需要大致了解如何实现这一点?

来自 Web 服务的数据不会经常更改。所以我需要创建一些架构/机制,其中数据总是首先从数据库加载,然后如果新数据可从 Web 服务获得,那么我解析服务更新表然后更新 UI。

基本上我想要这样的东西

    MainThread
        |
        |
        |-------->>--------separate thread----->>-----|
        |                                             |
        |                    listener/              query db,
   populate UI <<----------- observer/  ------<<----get data 
        |                    something                |
        |                                             |
        |                                             |
        |                                             |
        |                               check if we have new data--->> if no-- DONE       
        |                                             |
        |                                           if yes
        |                                             |
        |                                     call web service,
        |                                         fetch data,
        |                                        update table
        |                     listener/               |
    update UI  <<-------------observer/-----<<--------|
        |                     something               
        |

有点像 Tumblr android App..

现在我想我可以通过将 AsyncTask 包装在一个类和一个接口(作为观察者/听众)中来实现这一点

但我喜欢使用 Loader(在 android 中可用),

还有其他建议吗?

4

1 回答 1

0

好问题 !

您似乎正在尝试实现著名的 Google I/O 设计模式? Google IO Rest 设计模式,已完成 ContentProvider,现在卡住了 https://www.youtube.com/watch?v=xHXn3Kg2IQE

我过去做过(也许不如应该做的好;-))。我的建议是确定这两点:

  • 你的表不是太复杂
  • 您的更新并不总是发生。

如果不是这种情况,您可能会因为数据库访问而面临性能问题。但这是一个非常好的模式。

另一个建议是使用事件总线而不是样板,令人沮丧的界面来更新 UI。(我通常使用这个https://github.com/greenrobot/EventBus没有性能问题,Otto 也很好也很简单,但不能很好地与 android-annotations 集成)。

希望它会有所帮助。

于 2013-09-13T14:00:14.160 回答