Android AsyncTaskLoader与AsyncTask

Android AsyncTaskLoader与AsyncTask,android,android-asynctask,android-loadermanager,Android,Android Asynctask,Android Loadermanager,由于蜂巢和v4兼容性库可以使用AsyncTaskLoader。据我所知,AsyncTaskLoader可以通过屏幕翻转等配置更改生存下来 是否建议使用AsyncTaskLoader而不是AsyncTask?LoaderManager是否也参与其中 但是我还没有找到任何关于如何正确使用AsyncTaskLoader的好例子。这些文件也没有提供任何例子。任何人都可以提供一些好的例子。您可以查看兼容性库的源代码以获得更多信息。FragmentActivity的作用是: 保留LoaderManager

由于
蜂巢
v4兼容性库
可以使用
AsyncTaskLoader
。据我所知,
AsyncTaskLoader
可以通过屏幕翻转等配置更改生存下来

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


但是我还没有找到任何关于如何正确使用
AsyncTaskLoader
的好例子。这些文件也没有提供任何例子。任何人都可以提供一些好的例子。

您可以查看兼容性库的源代码以获得更多信息。
FragmentActivity
的作用是:

  • 保留
    LoaderManager的列表
  • 通过使用
    onRetainNonConfigurationInstance()
  • 在“活动”中调用
    initLoader()
    时踢右加载器
您需要使用
LoaderManager
与加载程序接口,并提供所需的回调来创建加载程序,并用它们返回的数据填充视图


一般来说,它应该比自己管理
异步任务
更容易。但是,
AsyncTaskLoader
并没有很好的文档记录,因此您应该在文档中学习该示例,并/或在
CursorLoader
之后对代码进行建模

AsyncTaskLoader执行与AsyncTask相同的功能,但稍好一些。它可以更容易地处理活动配置更改,并且在片段和活动的生命周期内表现。好在AsyncTaskLoader可以在使用AsyncTask的任何情况下使用。只要数据需要加载到内存中以便活动/片段处理,AsyncTaskLoader就可以更好地完成这项工作

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

  • 配置更改可能会把事情搞砸
  • 暂停活动不会暂停异步任务
  • 大量样板代码(这意味着可能出现更多错误)

当比较AsyncTaskLoaderAsyncTask时,您可能知道,当您旋转设备屏幕时,它可能会破坏并重新创建您的活动,为了清楚起见,请在网络事务进行时让image旋转您的设备:

AsyncTask将再次作为后台线程执行,而以前的后台线程处理只是冗余和僵化


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


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

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

AsyncTaskLoader上使用AsyncTaskLoader时:


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

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


  • AsyncTaskLoader可以共享给多个片段,前提是它们具有公共父活动,并且从
    getActivity().getSupportLoaderManager()启动


  • AsyncTaskLoader在其链接的活动不再可用时被
    LoaderManger
    销毁。而如果调用方活动被销毁,我们需要手动销毁异步任务。这节省了我们写所有清理工作的时间。AsyncTaskLoader可以很好地处理各自的生命周期


因此,AsyncTaskLoader比AsyncTask好得多。

我会看看这个。也许现在找到关于
AsyncTaskLoader
的好例子还为时过早,当更多的开发人员开始使用它时,就会有更多的例子出现。