9

两年前,出现了片段、意图服务、游标加载器。该方法是否仍然是最新的,或者是否有更好或成熟的模式来设计一个android rest客户端,特别是与选项B相比(我没有发布图像的特权,而是可以从这篇文章中找到图像)。

我知道内容提供者部分是必不可少的。服务助手和服务组件呢?到目前为止,startService 方法是 Context 或其子类的一种性质。这意味着服务助手将是一项活动。那么从内容提供者发起活动是优雅的,还是应该从顶部的活动发起。

  • 对于那些深入研究google io 2011 iosched 应用程序源代码的人,您是否会将 HomeActivity 中的静态类 SyncStatusUpdaterFragment 视为服务助手,虽然它无法启动 SyncService,但它确实会监听来自 SyncService 的回调和触发 UI 刷新。那么它是否可以被视为 Virgil Dobjanschi 方法的一种变体?

有服务、意图服务、异步任务和线程。在我看来,意图服务适用于从远程服务器同步大量数据。这就是他们在iosched中使用它的原因。但常见的情况是只有部分项目会与远程服务器同步。所以意图服务太重了。甚至服务方式。我们是否可以只使用内容提供程序中的 asyncTask 或线程或其中的某个组件来完成此类任务。或者是否有任何令人信服的理由来使用该服务,并通过服务助手-服务-处理器路径。我说的是一个严肃的应用程序。

那你怎么看?

4

1 回答 1

2

那么从内容提供者发起活动是优雅的,还是应该从顶部的活动发起。

您永远不会从内容提供者那里发起活动。一切都应该从您的活动开始,无论是 AsyncTask、Service 还是 Content Provider 请求……

AsyncTasks 通常是一个糟糕的选择。在处理配置更改(即屏幕方向更改)时,它们只是有缺陷。加载器是解决此问题的方法,但困难的部分是将其与您的网络调用包装在一起。一种解决方案是从自定义加载器(子类化 AsyncTaskLoader)构建网络调用。

然而,就我而言,我遵循了 2010 年的 Google IO 演示文稿。构建了一个类,ServiceHelper,以管理服务对象中对服务器的请求(它启动线程以执行网络查询)。ServiceHelper 管理可以从调用 Activity 创建的 ResultReceiver。这允许活动监听来自服务请求的事件,例如查询何时开始和结束(或何时出错)。这些线程将调用它们的网络查询,然后将结果数据存储在 ContentProvider 中(用于缓存并在必要时跨多个活动使用)。

同时,我在 Activity 上有一个 CursorLoader,它监听网络线程将写入的端点。显然,有很多中间立场可以解决您自己的问题。例如您的缓存策略和这种实现的开销。但这实际上取决于您正在构建的应用程序和您正在集成的 API。

所以是的,我认为 2010 年的演讲仍然有效。他的演讲中有很多模糊的领域,今天仍在继续。您仍然需要设计出适合您的应用的设计

希望我的想法能帮助你开始..

于 2012-07-14T06:18:29.220 回答