Androidasynchronous数据加载方法

如果我需要通过HTTP(或其他)asynchronous加载一些数据以更新用户界面,那么在编写Android应用程序时(我肯定错过了其他许多选项),我有几个选项:

  1. 使用常规线程和处理程序来更新UI。

  2. 的AsyncTask

  3. 使用和IntentService ,并使用callback或通过意图广播结果。

  4. 使用装载机 。

据我所知,一个IntentService并没有绑定到一个Activity的生命周期,所以对方向等的任何改变都不会影响数据的检索。 如果这不是一个AsyncTask或线程在一个Activity中触发的情况。

这个问题的原因是我最近刚刚读到Loaders ,对于它的应用感到困惑。 它们似乎与数据源更紧密地联系在一起,如果数据源发生变化,那么“透明”的处理就会得到适当的处理。 Loaders似乎也容忍configuration/方向的变化(我相信)。

我一直在使用一个IntentService来进行REST式服务调用,并将结果广播到适当的活动中。

我假设我可以写一个基于HTTP的Loader,但我不知道这是否是这个机制的最佳使用。

使用其中一种asynchronous数据加载方法的优点/缺点是什么?

Solutions Collecting From Web of "Androidasynchronous数据加载方法"

所有这些机制都是简单的select。 没有一个适合所有工具的东西,所以完成相同任务的所有这些不同方法都是尽可能多地覆盖用例的一种方法。

最终,由您决定哪种方法对您的scheme更有意义。 但是,对于你应该使用什么的一种通用的解释…

  1. 普通线程和处理程序 – 为什么还有其他更简单的选项?

  2. AsyncTask – 由于AsyncTask几乎总是依赖于一个Activity,所以当你需要asynchronous加载数据时,可以使用它,你可以100%确定需要多长时间。 示例:执行SQLite查询。

  3. IntentService / Service – 服务没有像AsyncTask那样绑定到一个Activity,因此它们对于你可能不知道需要多长时间完成的场景来说是完美的。 示例:从Web API下载数据并更新数据库。

  4. 加载器 – 加载器旨在简化加载数据并将其填充到UI的过程。 装载机的性质假设你将要加载的数据将以某种forms列出给用户。 示例:下载数据并将其填充到ListView中