我阅读了关于Loaders的android指南。
我读了Alex Lockwood 4部分tutorial。测试了他的样本app。
试图阅读Google App for I / O 13,有一个Stream功能并阅读其代码,发现它使用Loaders,因为它提供了创建StreamLoader
的代码。这是Link
我想他们用它来监控新数据并将它们添加到他们的视图中。
Alex的应用程序也是如此。有一个观察者,当有新的数据条目触发UI的刷新时。
到目前为止,在我看来,Loaders是“livescore”应用程序的理想选择。当有新的更新(这意味着新的数据输入)时,它会显示在屏幕上。
也许像Twitter这样的东西。新消息,自定义Observer
注意到更改,自定义Loader
带来数据和适配器显示它们。无需“拉动刷新”。
但是,Twitter又有了自己的RESTful API,它有点做同样的工作。不需要指向新数据的指针。 (不知道他们是怎么做的,但我想某种程度上“推送”你的设备的新数据)。
所以我的问题是:
当我们想要观察数据源和更改我们的视图以便显示新数据时,装载程序是最佳选择吗?
是否有任何示例/应用我可以检查处理该逻辑:监控数据源 - >获取数据 - >刷新UI
任何特征情况(例如我之前提到的“实时评分”)当我们必须处理它们时,我们有来选择装载机?
Loaders的第二部分(配置更改,保留数据)我认为很清楚。当用户旋转设备时,没有人想要重新下载图库。
谢谢你,原谅我的困惑
答案 0 :(得分:2)
我可以描述Loader的最佳方式是始终打开的Handler。加载器和处理程序都在对象之间传递数据。
我同意你所说的"比分直播"应用程序。 加载程序监视其数据源,并在内容更改时提供新结果。
回答你的问题:
1)当我们想要观察数据源并更改视图以便显示新数据时,加载器是最佳选择吗?
答:是的。如果您的数据源不断更新。例如,像股票行情应用程序。如果您的数据不是经常更新,那么不,不要使用加载程序。例如,如果您的数据源仅被检索一次,那么就不需要加载器。
2)是否有任何示例/应用我可以检查处理该逻辑:监控数据源 - >获取数据 - >刷新UI
答案 1 :(得分:-4)
是的,它们是您想要用于描述流程的内容。在切向上,还有AsyncTasks和具有相似性的服务。
<强> AsyncTasks 强>
描述(来自文档):
AsyncTask旨在成为Thread和Handler的辅助类,并不构成通用的线程框架。理想情况下,AsyncTasks应该用于短操作(最多几秒钟。)
警告:使用工作线程时可能遇到的另一个问题是由于运行时配置更改(例如用户更改屏幕方向时)而导致活动意外重新启动,这可能会破坏您的工作线程。要了解如何在其中一次重新启动期间保留任务以及如何在销毁活动时正确取消任务,请参阅Shelves示例应用程序的源代码。
如果您只是想要一个基本线程样板包装器,请使用AsyncTask,否则如果您需要一种通用方法在Activity或Fragment中运行密集型操作,我建议您使用AsyncTaskLoader。您可以从AsyncTask获得相同的好处,但它可以为您处理生命周期问题。还有一些专业的加载器,例如CursorLoader,它们可以处理特定的数据源,并且可以方便地与某些UI元素进行交互。
<强>服务强>
描述(来自文档):
服务是一种应用程序组件,可以在后台执行长时间运行的操作,但不提供用户界面。另一个应用程序组件可以启动服务,即使用户切换到另一个应用程序,它也将继续在后台运行。此外,组件可以绑定到服务以与其交互,甚至可以执行进程间通信(IPC)。例如,服务可以从后台处理网络事务,播放音乐,执行文件I / O或与内容提供商交互。
您可以使用服务来处理推送到手机的数据。否则,用户必须打开您的应用以获取任何推送数据。服务不与您的UI交互。因此,常见的设计模式是使用服务从服务器收集数据(无论是实时推送还是轮询)并将其存储在数据库中,以便在应用程序打开时或不打开时使用。服务还有许多其他用例,但这可能是最受欢迎的。
<强>结论强> 所以不,您不需要使用Loader来加载数据或在后台线程上执行长时间运行操作并将结果(或进度)传递给UI线程,但它们是大多数用例的最佳选择。