31

装载机

  1. 监控数据源提供新结果
  2. 配置更改后:无需重新查询数据

我阅读了有关Loaders的 android 指南。我阅读了 Alex Lockwood 4 部分教程。也测试了他的示例应用程序。尝试阅读 Google App for I/O 13,有一个 Stream 功能,阅读它的代码发现它使用 Loaders,因为它提供代码来创建一个StreamLoader. 这是 我想他们用它来监视新数据并将它们添加到他们的视图中的链接。

Alex 的应用程序也是如此。有一个观察者,当有新的数据条目时会触发 UI 的刷新。

到目前为止,在我看来,Loaders 是“livescore”应用程序的理想选择。当有新的更新(这意味着新的数据条目)时,它会出现在您的屏幕上。

也许像推特这样的东西。为您提供新消息,自定义Observer通知更改,自定义Loader带来数据和适配器来显示它们。无需“拉动刷新”。但话说回来,Twitter 有自己的 RESTful API,可以做同样的工作。不需要指向新数据的指针。(不知道他们是如何做到的,但我猜想以某种方式将新数据“推送”到您的设备)。

所以我的问题是:

当我们想要观察数据源 更改视图以显示新数据时,加载器是最佳选择?

是否有任何示例/应用程序我可以检查处理该逻辑:监视数据源-> 获取数据-> 刷新 UI

任何典型案例(比如我之前提到的“livescore”),当我们必须处理它们时,我们必须选择加载器?

Loaders 的第二部分(配置更改,保留数据)我认为它很清楚。当用户旋转设备时,没有人想重新下载图片库。

谢谢并原谅我的困惑

4

2 回答 2

2

我可以描述加载器的最佳方式是始终打开的处理程序。Loaders 和 Handlers 都在对象之间传递数据。

我同意你所说的“livescore”应用程序。Loader 监控其数据的来源,并在内容更改时提供新的结果。

要回答您的问题:

1)当我们想要观察数据源并改变我们的视图以显示新数据时,加载器是最佳选择?

答:是的。如果您的数据源不断更新。例如,就像一个股票行情应用程序。如果您的数据不是不断更新,那么不,不要使用加载器。例如,如果您的数据源只检索一次,则不需要加载器。

2)是否有任何示例/应用程序我可以检查处理该逻辑:监控数据源->获取数据->刷新用户界面

答:https ://www.youtube.com/watch?v=3d9BeWqlfTk

于 2015-11-04T05:57:48.230 回答
-4

是的,它们就是您要用于您所描述的流程的内容。相切地,还有 AsyncTasks 和 Services 有相似之处。

异步任务

描述(来自文档):

AsyncTask 被设计为围绕 Thread 和 Handler 的辅助类,并不构成通用线程框架。理想情况下,AsyncTasks 应该用于短操作(最多几秒钟。)

注意:使用工作线程时您可能会遇到的另一个问题是由于运行时配置更改(例如当用户更改屏幕方向时)导致活动中的意外重启,这可能会破坏您的工作线程。要了解如何在这些重启之一期间保留您的任务以及如何在活动被销毁时正确取消任务,请参阅 Shelves 示例应用程序的源代码。

如果您特别想要一个基本线程样板的包装器,请使用 AsyncTask 否则我建议您使用AsyncTaskLoader如果您需要一种通用方式在 Activity 或 Fragment 中运行密集操作。您可以从 AsyncTask 获得相同的好处,但它会为您处理生命周期问题。还有一些特殊的加载器,例如 CursorLoader,它们将用于处理特定的数据源,并且可以方便地与某些 UI 元素进行交互。

服务

描述(来自文档):

Service 是一个应用程序组件,可以在后台执行长时间运行的操作,并且不提供用户界面。另一个应用程序组件可以启动一个服务,即使用户切换到另一个应用程序,它也会继续在后台运行。此外,组件可以绑定到服务以与其交互,甚至执行进程间通信 (IPC)。例如,服务可能会在后台处理网络事务、播放音乐、执行文件 I/O 或与内容提供者交互。

您将使用服务来处理推送到手机的数据。否则,用户必须打开您的应用程序才能获取任何推送的数据。服务不与您的 UI 交互。因此,一种常见的设计模式是使用服务从服务器收集数据(无论是实时推送还是轮询)并将其存储在数据库中,以便在您的应用程序打开或不打开时使用。服务还有许多其他用例,但这个可能是最受欢迎的。

结论 因此,不,您不需要使用 Loader 来加载数据或在后台线程上执行长时间运行的操作并将结果(或进度)传递给您的 UI 线程,但它们是大多数用例的最佳选择。

于 2013-09-03T22:04:19.937 回答