何时使用 Android Loaders

31

加载器

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

我阅读了关于加载器的Android指南。 我阅读了Alex Lockwood的四部分教程。也试用了他的示例应用程序。 尝试阅读Google I/O 13的应用程序,其中有一个流功能,并通过阅读其代码发现它使用了加载器,因为它提供了创建StreamLoader的代码。这是链接。 我想他们使用加载器来监视新数据并将其添加到视图中。

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

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

可能像Twitter一样。针对更改的自定义Observer,自定义Loader提供数据和适配器来显示它们。不需要“下拉刷新”。 但是Twitter有自己的RESTful API,可以完成类似的工作。不需要指向新数据的指针。(不知道他们是如何做到的,但我猜他们以某种方式将新数据“推送”到您的设备上)。

所以我的问题是:

当我们想要观察数据源并改变视图以显示新数据时,加载程序是最好的选择。

有没有任何例子或应用程序可以检查处理该逻辑:监视数据源->获取数据->刷新UI?

是否有任何特征案例(例如我之前提到的“生活记分牌”)需要使用Loader?

加载器的第二部分(配置更改、保留数据)我认为已经很清楚了。没有人希望在用户旋转设备时重新下载图库。

谢谢您,对我的困惑表示歉意。

2个回答

2
我能描述Loader的最好方式是一个始终在运行的处理程序。Loader和Handler都可以在对象之间传递数据。
关于“livescore”应用程序,我同意你所说的。Loader监视其数据源,并在内容更改时提供新的结果。
回答你的问题:
1)当我们想要观察数据源并更改视图以显示新数据时,Loader是最好的选择吗?
A:是的。如果您的数据源不断更新。例如,像股票行情应用程序一样。如果您的数据没有不断更新,则不要使用Loader。例如,如果只检索了一次数据源,则不需要Loader。
2)有哪些示例/应用程序可以检查处理该逻辑:监视数据源 - >获取数据 - >刷新UI
A:https://www.youtube.com/watch?v=3d9BeWqlfTk

-4

是的,它们是您描述的流程所需使用的内容。顺带提一下,还有类似的AsyncTasks和Services。

AsyncTasks

描述(来自文档):

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

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

如果你只是想要一个基本的线程壳,那么使用AsyncTask,否则我建议您在Activity或Fragment中需要通用的方法来运行密集操作时可以使用AsyncTaskLoader。您从AsyncTask中获得相同的好处,但它为您处理了生命周期问题。还有特殊的加载器,比如CursorLoader,它们专门处理特定数据源,并具有与特定UI元素交互的便利性。

服务

描述(来自文档):

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

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

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


3
你能提供一个链接作为来源吗?我没有找到任何关于AsyncTask被弃用的信息。 - RoraΖ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接