如果我需要通过HTTP(或其他)异步加载一些数据来更新UI,我在编写Android应用程序时会有一些选择(我肯定会错过许多其他选项):
使用常规线程和处理程序更新UI。
使用和IntentService,并使用回调或通过意图广播结果。
使用Loaders。
据我所知,IntentService与Activity的生命周期无关,因此对方向等的任何更改都不会影响数据的检索。对于在Activity中触发的AsyncTask或线程不是这种情况。
问题的原因是,我刚刚阅读了Loaders
,并对其应用感到困惑。它们似乎与数据源关系更紧密,如果数据源发生变化,那么“透明地”将对所有内容进行适当处理。 Loaders
似乎也容忍配置/方向的变化(我相信)。
我一直在使用IntentService来进行RESTful服务调用,并广播要由相应活动接收的结果。
我假设我可以编写基于HTTP的Loader,但我不确定这是否是这种机制的最佳用法。
使用其中一种异步数据加载方法的优点/缺点是什么?
答案 0 :(得分:2)
所有这些机制都是简单的选择。没有一种适合所有工具的东西,所以所有这些完成相同任务的不同方法都是尽可能多地覆盖用例的方法。
最终,由您决定哪种方法对您的方案更有意义。但是对于你应该使用什么的一般性解释......
常规线程和处理程序 - 为什么还有其他更简单的选项?
AsyncTask - 由于AsyncTask几乎总是依赖于Activity,因此当您需要异步加载数据并且100%确定可能需要多长时间时,请使用它。 示例:执行SQLite查询。
IntentService / Service - 服务不像AsyncTask那样绑定到Activity,因此,它们非常适合您可能不知道完成所需时间的场景。 示例:从Web API下载数据并更新数据库。
加载程序 - 加载程序旨在简化加载数据并将其填充到UI中的过程。 Loaders的性质假定您要加载的数据将作为某种列表呈现给用户。 示例:下载数据并将其填充到ListView