AsyncTaskLoader vs AsyncTask

由于Honeycombv4 Compatibility Library可以使用AsyncTaskLoader 。 据我所知, AsyncTaskLoader可以通过像屏幕翻转之类的configuration更改而生存下来。

build议使用AsyncTaskLoader而不是AsyncTaskLoaderManager得到图片吗?

但是我还没有find任何关于如何正确使用AsyncTaskLoader好例子。 文档也没有提供任何示例。 谁能提供一些很好的例子。

您可以查看兼容性库的源代码以获取更多信息。 FragmentActivityfunction是:

  • 保留一个LoaderManager的列表
  • 请确保在使用onRetainNonConfigurationInstance()保存实例时,在翻动手机(或发生其他configuration更改)时不会破坏它们。
  • 当你在你的Activity中调用initLoader()时候踢右边的加载器

您需要使用LoaderManager与加载程序进行LoaderManager ,并提供所需的callback来创build加载程序并使用返回的数据填充您的视图。

一般来说,应该比自己pipe理AsyncTask更容易。 但是, AsyncTaskLoader并没有完全logging在案,因此您应该在文档中研究示例,并在CursorLoader之后为您的代码build模。

当比较AsyncTaskLoaderAsyncTask ,就像你可能知道当你旋转你的设备屏幕一样,它可能会破坏并重新创build你的活动,让networking事务正在进行时让图像旋转你的设备:

AsyncTask将被作为后台线程重新执行,而前一个后台线程处理只是多余的僵尸。

AsyncTaskLoader只会在Loader Manager中注册的Loader ID之前被重新使用,所以避免重新执行networking事务。

总之, AsyncTaskLoader可以防止重复的后台线程,并消除僵尸活动的重复。

AsyncTaskLoaderAsyncTask执行相同的function,但好一点。 它可以更轻松地处理活动configuration更改,并且在碎片和活动的生命周期内运行。 好的是AsyncTaskLoader可以用于任何使用AsyncTask的情况。 无论何时,需要将数据加载到内存中以供Activity / Fragment处理,AsyncTaskLoader可以更好地完成这项工作。

但是,使用AsyncTasks有几个问题:

  • configuration更改可能会搞砸
  • 暂停一个活动不会暂停AsyncTask
  • 大量的样板代码(这意味着更多的错误)

AsyncTaskLoader文档