android 异步任务加载程序与异步任务

xfb7svmp  于 2023-01-28  发布在  Android
关注(0)|答案(4)|浏览(151)

由于Honeycombv4 Compatibility Library,使用AsyncTaskLoader是可能的。据我所知,AsyncTaskLoader可以通过像屏幕翻转这样的配置更改生存。
建议使用AsyncTaskLoader而不是AsyncTask吗?LoaderManager也会出现吗?
但是我没有找到任何关于如何正确使用AsyncTaskLoader的好例子。文档也没有提供例子。谁能提供一些好例子呢?

vddsk6oq

vddsk6oq1#

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

  • 保留LoaderManager的列表
  • 通过使用onRetainNonConfigurationInstance()保存示例,确保它们不会在您翻转电话(或发生其他配置更改)时被破坏
  • 在Activity中调用initLoader()时,请选择正确的加载程序

您需要使用LoaderManager与加载器接口,并提供所需的回调函数来创建加载器,并用加载器返回的数据填充视图。
一般来说,这应该比自己管理AsyncTask更容易。但是,AsyncTaskLoader并没有得到很好的记录,所以您应该学习文档中的示例和/或按照CursorLoader建模您的代码。

vuv7lop3

vuv7lop32#

比较AsyncTaskLoaderAsyncTask,您可能知道,当您旋转设备屏幕时,它可能会破坏并重新创建您的活动。为了更清楚地说明这一点,让我们想象在网络事务进行时旋转您的设备:

AsyncTask将再次作为后台线程重新执行,之前的后台线程处理将只是冗余和僵尸。
AsyncTaskLoader将仅基于之前在Loader Manager中注册的Loader ID重新使用,因此将避免重新执行网络事务。

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

1hdlvixo

1hdlvixo3#

AsyncTaskLoader执行与AsyncTask相同的功能,但稍好一些。它可以更轻松地处理活动配置更改,并且在片段和活动的生命周期内运行。优点是AsyncTaskLoader可以用于使用AsyncTask的任何情况。任何时候,只要需要将数据加载到内存中,以便活动/片段进行处理,AsyncTaskLoader可以更好地完成这项工作。

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

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

AsyncTaskLoader doc

htzpubme

htzpubme4#

除其他答复中所述之外的一些差异:
异步任务上使用异步任务加载器时:

*AsyncTaskLoader允许我们加载旧的缓存数据,直到forceLoad()返回新数据

  • 我们可以通过setUpdateThrottle()AsyncTaskLoader设置延迟,这可以防止对客户端的连续更新(活动/片段)
    *AsyncTaskLoader可以共享给多个片段,前提是这些片段具有共同的父活动并且从getActivity().getSupportLoaderManager()启动
    *AsyncTaskLoader在其链接的活动不再可用时被LoaderManger销毁。而如果其调用者活动销毁,则需要手动销毁AsyncTasks。这节省了我们编写所有清除内容的时间。AsyncTaskLoader在其各自的生命周期中运行良好。

因此,AsyncTaskLoader比AsyncTask好得多。

相关问题