AsyncTaskLoader与AsyncTask

OKA*_*OKA 128 android android-asynctask android-loadermanager

既然Honeycombv4 Compatibility Library可以使用AsyncTaskLoader.据我所知,它AsyncTaskLoader可以通过配置更改生存,如屏幕翻转.

是否建议使用AsyncTaskLoader而不是AsyncTask?是否LoaderManager也参与其中?

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

Nik*_*kov 51

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

  • 保持名单LoaderManager
  • 通过使用保存实例来确保它们在您翻转手机(或发生其他配置更改)时不会被破坏 onRetainNonConfigurationInstance()
  • 当你打电话给initLoader()你的活动时踢右边的装载机

您需要使用LoaderManagerto与加载器接口,并提供所需的回调以创建加载器并使用它们返回的数据填充视图.

一般来说,它应该比管理AsyncTask自己更容易.但是,AsyncTaskLoader文档记录不完整,因此您应该在文档中学习示例和/或在之后对代码进行建模CursorLoader.

  • 我来看看这个.也许现在要找到关于`AsyncTaskLoader`的好例子还为时过早,当更多开发人员开始使用它时,会有更多的例子. (5认同)

Hoa*_*ong 45

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

AsyncTask将再次作为后台线程重新执行,之前的后台线程处理只是冗余和僵尸.

AsyncTaskLoader将根据之前在Loader Manager中注册的Loader ID重新使用,因此避免重新执行网络事务.

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


Att*_*tif 11

AsyncTaskLoader执行相同的功能的AsyncTask,但好一点.它可以更轻松地处理Activity配置更改,并且它在Fragments和Activities的生命周期内运行.好消息是AsyncTaskLoader可以在任何使用AsyncTask的情况下使用.无论何时需要将数据加载到内存中以供Activity/Fragment处理,AsyncTaskLoader都可以更好地完成工作.

但是,使用AsyncTasks存在一些问题:

  • 配置更改可能会搞砸
  • 暂停活动不会暂停AsyncTask
  • 相当数量的样板代码(这意味着更多可能的错误)

AsyncTaskLoader doc


Pal*_*rji 8

除了其他答案中描述的一些差异:

当使用AsyncTaskLoader的AsyncTask:

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

  • 我们可以设置AsyncTaskLoader的延迟,通过setUpdateThrottle()它可以阻止对客户端的连续更新(Activity/Fragment)

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

  • AsyncTaskLoaderLoaderManger在其链接活动不再可用时被销毁.我们需要手动销毁AsyncTasks,如果它的调用者活动破坏了.这节省了我们编写所有清算内容的时间.AsyncTaskLoader可以很好地适应各自的生命周期.

因此,AsyncTaskLoader比AsyncTask更好.