AsyncTaskLoader与AsyncTask


129

由于Honeycombv4 Compatibility Library可以使用AsyncTaskLoader。据我了解,这些AsyncTaskLoader可以通过屏幕翻转等配置更改来生存。

是否建议使用AsyncTaskLoader代替AsyncTask?是否LoaderManager得到照片吗?

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

Answers:


51

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

  • 保持名单LoaderManager
  • 通过使用以下方式保存实例,以确保当您翻转手机(或发生其他配置更改)时它们不会被破坏 onRetainNonConfigurationInstance()
  • 当您致电“ initLoader()活动” 时,踢正确的装载机

您需要使用LoaderManager与加载程序进行接口,并提供所需的回调以创建加载程序,并使用它们返回的数据填充视图。

通常,它应该比AsyncTask自己管理要容易。但是,该AsyncTaskLoader文档的记录不完全正确,因此您应该在docs中研究示例和/或在之后对代码进行建模CursorLoader


5
我会看看这个。也许找不到有关的好的示例为时过早AsyncTaskLoader,并且当更多的开发人员开始使用它时,将会有更多的示例出现。
OKA

47

在比较AsyncTaskLoaderAsyncTask时,您可能知道旋转设备屏幕时,它可能会破坏并重新创建您的活动,以使其清楚,以便在进行网络事务时让图像旋转设备:

AsyncTask将再次作为后台线程重新执行,并且以前的后台线程处理只是多余而僵尸。

AsyncTaskLoader将仅基于之前在Loader Manager中注册的Loader ID进行重用,因此避免重新执行网络事务。

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


11

AsyncTaskLoader执行的相同的功能的AsyncTask,但好一点。它可以更轻松地处理活动配置更改,并且在“片段和活动”的生命周期内运行。令人高兴的是,可以在使用AsyncTask的任何情况下使用AsyncTaskLoader。任何时候需要将数据加载到内存中以便活动/片段进行处理时,AsyncTaskLoader都能做得更好。

不过,使用AsyncTasks存在一些问题:

  • 配置更改可能会使事情变得混乱
  • 暂停活动不会暂停AsyncTask
  • 大量样板代码(这意味着更多可能的错误)

AsyncTaskLoader文档


8

除其他答案中所述以外,其他一些区别:

当使用AsyncTaskLoader的AsyncTask

  • AsyncTaskLoader使我们可以自由加载旧的缓存数据,直到由forceLoad()

  • 我们可以设置延迟AsyncTaskLoader通过setUpdateThrottle()它可以防止连续更新客户端(活动/片段)

  • 如果AsyncTaskLoader具有共同的父级活动并且是从其开始的,则可以共享给多个片段getActivity().getSupportLoaderManager()

  • LoaderMangerAsyncTaskLoader的链接活动不再可用时,将被销毁。而如果调用者活动销毁,我们需要手动销毁AsyncTasks。这节省了我们编写所有清算资料的时间。AsyncTaskLoader在各自的生命周期中运行良好。

因此,AsyncTaskLoader比AsyncTask更好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.