30

在观看了关于这个主题的非常有名的视频后,我决定使用设计模式 B。使用带有 servicehelper 的 contentprovider。

休息时的谷歌设计模式

基本上我有以下文件:

  • 我的提供者
  • 我的数据库
  • 我的合同

在活动中,我现在可以获取内容解析器并查询提供者。到目前为止一切都很好。

现在我需要同步我的 contentprovider 以从我的 REST API 中获取数据。因此我需要实现一个服务助手服务和 Rest 方法。学习 Google IO 应用程序对我有很大帮助,我是 Android 新手,所以仍然很难弄清楚。

我看到谷歌使用 RemoteHandlers 来处理外部数据,我猜它们是图中的处理器类?

我不明白的是如何实现 servicehelper + service 部分来从网络中获取数据。

  • 我在哪里呼叫服务助手?
  • 服务和助手具体需要做什么?
  • 这种精确的设计模式有什么好的例子吗?

我已经阅读了有关此堆栈的几个主题,都提出了不同的方法。我找到了一个声明 restprovider 的示例,然后 myProvider 必须扩展该提供程序。我不喜欢这些解决方案,并希望遵循这种结构化的设计模式。

4

1 回答 1

20

据我了解,模式是:

  • 不要显示空活动并在后台加载内容。当加载失败时,您将无法显示任何内容。
  • 而是显示存储在数据库中的数据,可通过内容提供者和适配器访问 - 这保证了用户始终可以看到内容
  • 在后台获取新数据,一旦数据在手机上,活动就会通过适配器自动更新

对于您的问题(我更改了顺序):

我在哪里呼叫服务助手?
我从 Vigils talk 中选择模式 A。在这种情况下,调用取决于您的应用程序。您可以在应用程序启动、创建活动或用户选择更新按钮时触发更新。我会选择在活动创建。

您选择了模式 B。在这种情况下,很明显内容提供者必须触发更新。什么时候?获取新数据:在创建时或第一次读取访问之后。我会使用创建时间。在您的内容提供者中执行相应操作后的创建、更新、删除。

这种精确的设计模式有什么好的例子吗?
来自我在https://stackoverflow.com/a/8693919/734687的帖子:我知道的唯一开源参考实现在http://datadroid.foxykeep.com下可用。它是一个可以在您自己的应用程序中使用的库。该架构在 /presentation 下进行了解释 - 请确保您阅读了它。

服务助手具体需要做什么?
如果您查看幻灯片 19 中的幻灯片,它是一个单例,它封装了对服务的调用并通过请求 ID 处理异步调用

该服务需要做什么?
该服务(演示文稿中的幻灯片 17)只是确保操作在后台执行。

于 2012-02-08T15:19:48.883 回答